У меня есть 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;
}
Как вы можете видеть, что я дон Не знаю, как определить привязку в шаблоне столбца, потому что имя столбца изменяется.
EDIT:
В дополнение к принятому ответ - иногда это легче создать весь шаблон программно, как описано здесь: http://fczaja.blogspot.com/2013/12/wpf-datagrid-custom-template-for.html
Этот подход работает, однако мне нужно определить этот шаблон ячейки на уровне пользовательского контроля, а не в приложении. Причина этого в том, что я разрабатываю библиотеку UserControl, которая будет повторно использоваться несколькими приложениями. Любой обходной путь для этого? Кроме того, текущий код не будет компилироваться, поскольку XamlReader.Load ожидает поток (простое исправление). – filip