Прочитав отличную статью о том, как настроить автоматически сгенерированные столбцы , я столкнулся с проблемой.
Пытаясь настроить автоматически сгенерированные столбцы в элементе управления DataGrid
, я хочу сделать простые вещи, например, убедиться, что все числовые значения столбцов выровнены по правому краю. Для этого я создал DataTemplate
следующим образом:
<DataGrid x:Name="MyGrid" AutoGeneratingColumn="MyGrid_AutoGeneratingColumn">
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<TextBlock Text="{Binding}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
</DataGrid>
Затем в обработчике событий AutoGeneratingColumn
DataGrid
я хочу назначить этот общий DataTemplate
как CellTemplate
для всех целых (т. Е. Числовых) столбцов:
public void MyWindow_AdjustColumnTemplateBasedOnType(
DataGridAutoGeneratingColumnEventArgs e)
{
if (/*This is a column I want to change*/)
{
DataGridTemplateColumn column=new DataGridTemplateColumn();
column.Header=e.PropertyName;
column.CellTemplate=MyGrid.FindResource("IntegerTemplate") as DataTemplate;
e.Column=column;
}
}
Проблема в том, что значение столбца Text
в TextBlock
не отображает желаемых результатов. Вместо того, чтобы видеть правильное обоснованное значение в каждой ячейке, столбец которой имеет DataTemplate
в качестве CellTemplate
, я вижу:
Использование пустого синтаксиса привязки путем установки атрибута Text
в "{Binding}"
, очевидно, неверно. Установка привязки на основе пути дает желаемый результат. То есть, если я установлю привязку (жестко закодированный путь данных), используя что-то вроде:
<DataGrid.Resources>
<DataTemplate x:Key="IntegerTemplate">
<!-- Binding hard set to ProductId -->
<TextBlock Text="{Binding ProductId}" HorizontalAlignment="Right"/>
</DataTemplate>
</DataGrid.Resources>
Тогда все хорошо, но мой родовой DataTemplate
больше не является родовым. Вместо того, чтобы повторно использовать его для всех целочисленных столбцов, его можно использовать только для столбца ProductId
, поскольку привязка фиксируется на значении этого конкретного элемента данных:
Какую правильную привязку я должен использовать, чтобы универсальный DataTemplate
фактически использовал любое значение в соответствующем свойстве ItemSource
для столбца, с которым он связан.