假设您为类Person
编写代码,其属性由基本类型和组成,类Address
的属性都是基本类型。您在Person
中放置了多个ObservableCollection
对象,并且希望将其绑定到DataGrid。具有基本类型的属性将正常显示,但属性Address
(即由基本类型组成的类)将仅显示“(Collection)”。
我在谷歌搜索时发现了solution这个问题,但是对于一些小功能来说似乎有很多工作要做。我找到的解决方案是针对DataGridView
并且它的日期是2007年。现在我们可以使用WPF和DataGrid
还是一种更简单的方法,或者它是否同样困难?
示例代码:
class Person
{
private string id;
private string name;
private Address homeAddr;
public string ID
{
get { return id;}
set { id = value;}
}
public string Name
{
get { return name;}
set { name = value;}
}
public Address HomeAddr
{
get { return homeAddr;}
set { homeAddr = value;}
}
}
class Address
{
private string cityname;
private string postcode;
public string CityName
{
get { return cityname;}
set { cityname = value;}
}
public string PostCode
{
get { return postcode;}
set { postcode = value;}
}
}
答案 0 :(得分:2)
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}"/>
<DataGridTextColumn Binding="{Binding Name}"/>
<DataGridTextColumn Binding="{Binding HomeAddr.CityName}"/>
<DataGridTextColumn Binding="{Binding HomeAddr.PostCode}"/>
</DataGrid.Columns>
</DataGrid>
答案 1 :(得分:0)
您无法直接将地址添加到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>
您可以在此处找到有关转换器的更多信息:http://wpftutorial.net/ValueConverters.html