c# - WPF - 将嵌套的自定义对象绑定到数据网格
问题描述
我有一个相当大的对象,它的一些属性应该显示在数据网格中。问题是绑定效果不佳,嵌套对象值为空。
MainCustomObject是:
public class MainCustomObject
{
public int Id { get; set; }
public string Name { get; set; }
public CustomObject1 CustomObject1 { get; set; }
}
CustomObject1是:
public class CustomObject1
{
public string Name { get; set; }
public string Url { get; set; }
}
我的XAML代码是:
<DataGrid ItemsSource="{Binding MainCustomObjectList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="75" Binding="{Binding Name}" />
<DataGridTextColumn Header="CustomObject1_Name" Width="75" Binding="{Binding CustomObject1.Name}" />
<DataGridTextColumn Header="CustomObject1_Url" Width="75" Binding="{Binding CustomObject1.Url}" />
</DataGrid.Columns>
</DataGrid>
谢谢你们的帮助。
解决方案
我测试了您的代码,它以这种方式工作,即创建并显示一行。您的命名空间或类名可能不同。
主窗口
public partial class MainWindow : Window
{
public IEnumerable<MainCustomObject> MainCustomObjectList { get; set; } = new List<MainCustomObject>
{
new MainCustomObject
{
Id = 1,
Name = "Name1",
CustomObject1 = new CustomObject1
{
Name = "Custom name 1",
Url = "Url 1"
}
}
};
public MainWindow()
{
InitializeComponent();
}
}
XAML
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel>
<DataGrid ItemsSource="{Binding MainCustomObjectList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="CustomObject1_Name" Binding="{Binding CustomObject1.Name}" />
<DataGridTextColumn Header="CustomObject1_Url" Binding="{Binding CustomObject1.Url}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Window>
请注意,我将 绑定DataContext
到我自己的实例。否则,它会显示您报告的相同错误,即一个空列表。您还想确保列表已完全初始化,正如mm8 所怀疑的那样。如果仅填充第一列,则提示该属性CustomObject1
为null
.
推荐阅读
- ios - 如何调试从后台返回时发生的崩溃
- amazon-web-services - 为什么为 AspNetCore Lambda 函数配置的 AWS ALB 在重定向后会给出 502?
- c++ - 为什么 C 和 C++ 版本的代码的 CRC 计算不同?
- azure - AZCopy:摘要以及 /V 中的详细信息:参数
- xamarin.forms - 在包“android”中找不到属性“configchanges”的资源标识符
- python - Python 3 Pandas Dataframe - 使用股票数据实现一个简单的 shift()
- xslt - 如何通过匹配 XSLT 中的节点来复制值
- angularjs - 从另一个选择选项更新 ng-option 值
- wordpress - 如何从此导入表创建变体
- r - 修复 R 中的浮点错误 - MDMR 包显示近似不等式而不是精确答案的错误