我有一个对象列表List<List<object>>
列表,我希望以编程方式将其绑定到WPF数据网格。
到目前为止,我已经尝试过:
代码
dtgCores.ItemsSource = resinSystemData.data;
XAML
<DataGrid Name="dtgCores" Grid.Column="1">
但我只获得2列容量和数量。有人可以建议吗?
我有一个列表标题,我想以列表的格式使用。
如果oyu需要更多信息,请告诉我。
答案 0 :(得分:3)
数据网格不是为此而设计的。它需要列的属性(因此容量和计数)。
您需要选择:
List<SomeClass>
答案 1 :(得分:2)
默认情况下,DataGrid
会将列绑定到它作为ItemSource
收到的直接列表中的对象的属性。这就是为什么当使用List<List<object>>
作为'ItemSource'时,每一行都会显示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]
等等,然后将ItemSource
设置为testData
。
您可能还想将AutoGenerateColumns="False"
添加到DataGrid
,以防止创建Capacity
和Count
列。