3

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

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

代码

dtgCores.ItemsSource = resinSystemData.data;

xml

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

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

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

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

4

2 回答 2

3

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

您需要选择:

  • 使用另一个数据结构,比如List<SomeClass>
  • 使用另一个控件。带有 2 个数据模板的嵌套列表框可能会起作用。
于 2012-11-12T12:03:19.000 回答
3

默认情况下,aDataGrid会将列绑定到它作为ItemSource. 这就是为什么当使用 aList<List<object>>作为 'ItemSource' 时,每一行都会显示 a 和 的List两个Capacity属性Count

但是,您可以为每一列创建自己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]等),然后将 设置ItemSourcetestData.

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

于 2016-09-25T14:30:24.273 回答