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>