0

假设您为一个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;}
    }
}
4

2 回答 2

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>
于 2013-09-30T22:26:25.453 回答
0

不能将地址直接添加到 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>

在这里您可以找到有关转换器的更多信息:http ://wpftutorial.net/ValueConverters.html

于 2013-09-30T23:04:39.143 回答