【发布时间】:2014-10-01 15:40:11
【问题描述】:
我无法将 DataTemplate 应用于具有动态生成列的数据网格中的所有列。 ItemsSource 绑定到 VM 中的 DataTable 属性。除了模板之外的所有东西都工作得很好。现在这只是初步的概念证明,所以数据是垃圾,但需要概念证明方面的帮助。
代码如下:
查看:
<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Button Content="ok"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ViewModel - 在加载时,我正在创建一个表。显然最终会被一个 DB 调用代替……
[ImportingConstructor]
public GenericQueueViewModel()
{
int y = new Random().Next(20);
TestList = createTableForDataGrid(y);
}
private DataTable createTableForDataGrid(int numberOfCols)
{
DataTable test = new DataTable();
for (int i = 0; i < numberOfCols; i++)
{
DataColumn oDc = new DataColumn();
test.Columns.Add(oDc);
}
Random x = new Random();
int y = x.Next(100);
for (int i = 0; i <= y; i++)
{
DataRow oRow = test.NewRow();
for (int j = 0; j < test.Columns.Count; j++)
{
oRow[j] = i.ToString() + " | " + j.ToString();
}
test.Rows.Add(oRow);
}
return test;
}
private DataTable _testList;
public DataTable TestList
{
get { return _testList; }
set
{
_testList = value;
OnPropertyChanged(() => TestList);
}
}
结果:
这就像 DataGrid 最初是使用模板创建的,但是当 OnPropertyChanged 触发时,模板不会被调用。网格填充得很好,但标题中没有按钮。
我是否需要对 StaticResource 做一些事情才能让它工作?将样式拉出网格?我不太确定为什么它不起作用。
动态解决方案是强制性的。这是用于将加载“随便”的队列......可能是 5 列,可能是 200 列。所以我不能单独定义列。
【问题讨论】:
-
我只是在查看时注意到,column0 中没有生成任何内容,并且应该在 column0 中的数据在 column1、1 in 2 等...
标签: c# wpf datagrid datatemplate