我有一個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