将WPF数据网格绑定到List <list <object>&gt; </list <object>

时间:2012-11-12 11:58:54

标签: c# wpf data-binding

我有一个对象列表List<List<object>>列表,我希望以编程方式将其绑定到WPF数据网格。

到目前为止,我已经尝试过:

代码

dtgCores.ItemsSource = resinSystemData.data;

XAML

<DataGrid Name="dtgCores" Grid.Column="1">

但我只获得2列容量和数量。有人可以建议吗?

我有一个列表标题,我想以列表的格式使用。

如果oyu需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

数据网格不是为此而设计的。它需要列的属性(因此容量和计数)。

您需要选择:

  • 使用其他数据结构,例如List<SomeClass>
  • 使用另一个控件。带有2个数据表的嵌套列表框可能会起作用。

答案 1 :(得分:2)

默认情况下,DataGrid会将列绑定到它作为ItemSource收到的直接列表中的对象的属性。这就是为什么当使用List<List<object>>作为'ItemSource'时,每一行都会显示ListCapacityCount的两个属性。

但是,您可以为每列创建自己的DataGridColumn并将它们绑定到列表的索引。这是一个例子:

public void SetTestDataInGrid(List<List<object>> testData)
{
    testGrid.Columns.Clear();
    int colCount = testData.Max(x => x.Count);
    for (int i = 0; i < colCount; i++)
    {
        var currentColumn = new DataGridTextColumn();
        currentColumn.Binding = new Binding(string.Format("[{0}]", i));
        testGrid.Columns.Add(currentColumn);
    }
    testGrid.ItemsSource = testData;
}

此方法检查内部列表的最大长度以确定列数,然后为每列创建DataGridTextColumn,将每个列绑定到内部列表的正确索引([0][1]等等,然后将ItemSource设置为testData

您可能还想将AutoGenerateColumns="False"添加到DataGrid,以防止创建CapacityCount列。