Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将DataGrid绑定到数据源的第二级属性?_C#_Wpf_Data Binding_Properties - Fatal编程技术网

C# 如何将DataGrid绑定到数据源的第二级属性?

C# 如何将DataGrid绑定到数据源的第二级属性?,c#,wpf,data-binding,properties,C#,Wpf,Data Binding,Properties,假设您为一个属性由基本类型组成的类Person和一个属性均为基本类型的类Address编写代码。您将多个Person对象放入ObservableCollection中,并希望将其绑定到数据网格。具有基元类型的属性将正常显示,但由基元类型组成的类的属性Address将只显示“(Collection)” 我在谷歌搜索时发现了一个解决这个问题的方法,但似乎需要做很多工作才能获得一点功能。我找到的解决方案是针对DataGridView,日期是2007年。现在我们可以使用WPF和DataGrid了,还有更

假设您为一个属性由基本类型组成的类
Person
和一个属性均为基本类型的类
Address
编写代码。您将多个
Person
对象放入
ObservableCollection
中,并希望将其绑定到数据网格。具有基元类型的属性将正常显示,但由基元类型组成的类的属性
Address
将只显示“(Collection)”

我在谷歌搜索时发现了一个解决这个问题的方法,但似乎需要做很多工作才能获得一点功能。我找到的解决方案是针对
DataGridView
,日期是2007年。现在我们可以使用WPF和
DataGrid
了,还有更简单的方法吗?还是同样困难

示例代码:


无法将地址直接添加到DataGrid列的原因是该列需要一个基元类型,而您发送了一个“Address”类型的对象。 要解决此问题,必须创建一个转换器,将地址对象转换为基本类型,如字符串

首先在资源字典中添加转换器

<src:AddressToStringConverter x:Key="AddressToStringConverter" />

然后在网格中使用它

<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Id }"/>
    <DataGridTextColumn Binding="{Binding Name}"/>
    <DataGridTextColumn Binding="{Binding HomeAddr, Converter={StaticResource AddressToStringConverter}}"/>
  </DataGrid.Columns>
</DataGrid>


在这里,您可以了解有关转换器的更多信息:

您希望如何显示地址?邮政编码和城市分别在一列中还是在一个自定义单元格中同时保存?
<src:AddressToStringConverter x:Key="AddressToStringConverter" />
<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Id }"/>
    <DataGridTextColumn Binding="{Binding Name}"/>
    <DataGridTextColumn Binding="{Binding HomeAddr, Converter={StaticResource AddressToStringConverter}}"/>
  </DataGrid.Columns>
</DataGrid>