如何将集合数据绑定为数据网格中的列值?

时间:2013-10-24 00:41:43

标签: wpf data-binding datagrid datagridcolumn

我想将一组数据绑定为DataGrid中的不同列。我们绑定数据的正常方式是bind属性。但现在我的场景是属性是一个动态集合,可能与不同的对象实例不同。对于每个对象,我需要动态创建DataGrid

这里我给出了一个简化的实例,它是从我的场景中抽象出来的:

public class Company
{
    ...
    public string CompanyName { set; get; }
    public ObservableCollection<CompanyProperty> data;
}

public class CompanyProperty
{
    public string PropertyName { get; set; }
    public string Value { get; set; }
}

在我的主要课程中,我有一个ObservableCollection of Company:

class Window
{
    private ObservableCollection<Company> _list;
    private void CreateData()
    {
        Company tmp = new Company("Siemens");
        tmp.data.Add(new CompanyProperty() { PropertyName = "Country", Value = "Germany" });
        tmp.data.Add(new CompanyProperty() { PropertyName = "Staffs", Value = "400,000" });
        _list.Add(tmp);


        tmp = new Company("ABB");
        tmp.data.Add(new CompanyProperty() { PropertyName = "Country", Value = "Swiss" });
        tmp.data.Add(new CompanyProperty() { PropertyName = "Staffs", Value = "100,000" });
        _list.Add(tmp);
    }
 }

现在我想将我的数据绑定到DataGrid,它看起来像3列(CompanyName,Country,Staffs)和2行(Siemens,ABB)。

我正在努力解决的问题是如何将公司属性集合绑定到DataGrid中的不同列,因为“Country”和“Staffs”不是“Company”类的属性,而只是ObservableCollection成员。

1 个答案:

答案 0 :(得分:0)

经过一番调查后,我自己想出了一个解决方案,就是创建一个DataTable将集合数据传输到DataTable(我们可以轻松地将值更改为DataTable中的不同列)。

然后我们将DataTable绑定到datagrid,而不是绑定“ObservableCollection _list”。这似乎有效。

我仍然有兴趣知道是否有人为这种类型的Senario获得了一些其他或更好的解决方案?