我有一个DataGrid绑定到一个DataTable.DefaultView,它使用自动生成列来呈现网格。这部分工作正常。但是,对于某些列,我想使用自定义模板。问题是表中的列在每次加载时都会改变,所以解决方案需要是通用的。DataGrid的自定义列模板
我可以挂接到AutoGeneratingColumn事件描述here,但仍与定义模板结合有问题:
<UserControl.Resources>
<DataTemplate x:Key="customCellTemplate">
<TextBlock Text="{Binding ???"></TextBlock>
</DataTemplate>
</UserControl.Resources>
(...)
<DataGrid ItemsSource="{Binding DefaultView}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn">
</DataGrid>
而且我后面的代码:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
string colName = e.PropertyName;
if (someCondition)
{
var templateColumn = new DataGridTemplateColumn();
templateColumn.Header = colName;
templateColumn.CellTemplate = (DataTemplate)Resources["customCellTemplate"];
templateColumn.SortMemberPath = colName;
e.Column = templateColumn;
}
正如你可以看到我不不知道如何在列模板中定义绑定,因为列名更改。
编辑:
除了公认的答案 - 有时更容易编程创建整个模板如下所述: http://fczaja.blogspot.com/2013/12/wpf-datagrid-custom-template-for.html
这种方法是有效的,但是我需要在用户控制层上定义这个单元模板,而不是应用程序。原因是我正在开发一个UserControl库,它将被多个应用程序重用。任何解决方法? 此外,由于XamlReader.Load期望流(简单修复),因此当前代码无法编译。 – filip