我很难让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列。所以我不能单独定义列。
发布于 2014-10-01 17:39:22
您实际上是通过这种方式创建一个额外的列。要解决这个问题,您需要创建自定义列标头模板和设置标头模板的样式。如下所示:
<Style TargetType="DataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Button Content="Ok"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>
</DataGrid>https://stackoverflow.com/questions/26145155
复制相似问题