[英]How to bind DataGrid to a second-level property of a data source?
假設您為一個類Person
編寫代碼,該類Person
的屬性由原始類型組成, 而一個Address
類則所有屬性都是原始類型。 您將多個Person
對象放入ObservableCollection
並且想要將其綁定到DataGrid。 具有基本類型的屬性將正常顯示,但是由基本類型組成的類的屬性Address
將僅顯示“(Collection)”。
谷歌搜索時,我找到了解決該問題的方法,但是對於一些功能而言,這似乎需要大量工作。 我找到的解決方案是針對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;}
}
}
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}"/>
<DataGridTextColumn Binding="{Binding Name}"/>
<DataGridTextColumn Binding="{Binding HomeAddr.CityName}"/>
<DataGridTextColumn Binding="{Binding HomeAddr.PostCode}"/>
</DataGrid.Columns>
</DataGrid>
無法將Address直接添加到DataGrid列的原因是因為該列需要原始類型,並且您發送了“ Address”類型對象。 要解決此問題,您必須創建一個Converter,將您的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.