В datagrids WPF у меня есть столбец, определенный как DataGridTemplateColumn, который мне нужно будет использовать для всех типов столбцов. В качестве очень упрощенного примера, пожалуйста, рассмотрите ниже как образец фиктивного файла:
<DataGrid ItemsSource="{Binding Path=ItemList, Mode=OneWay}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" MinWidth="130" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Image Source="component/Images/test.png"/>
<TextBlock Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<Image Source="component/Images/test.png"/>
<TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
</DockPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Company" Binding="{Binding Company, ValidatesOnDataErrors=True}" MinWidth="115" Width="Auto"/>
</DataGrid.Columns>
</DataGrid>
Для простого примера, как я могу применить тот же шаблон, который используется для столбца с заголовком = Имя, к столбцу с заголовком = Company, без необходимости воспроизводить весь шаблон для каждого столбца?
Я нашел ответ с этот предыдущий вопрос SO, где они объясняют использование таких ресурсов, как:
<Application.Resources>
<DataTemplate x:Key="CellTemplate">
...
</DataTemplate>
<DataTemplate x:Key="CellEdintingTemplate">
...
</DataTemplate>
</Application.Resources>
<DataGrid Style="{StaticResource MainGridStyle}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource MyFirstColumnCellTemplate}" CellEdintingTemplate="{StaticResource MyFirstColumnCellEdintingTemplate}"/>
...
</DataGrid.Columns>
<DataGrid>
Это дает мне 95%, но последний фрагмент, который мне не хватает, - как обрабатывать привязку данных? Как создать какой-либо тип владельца места в шаблоне, а затем выполнить фактическое привязку в сетке?
ИЗМЕНИТЬ Я продолжал искать и нашел вопрос Создать общую DataGridTemplateColumn, которая звучит так, как я хочу сделать, на самом деле может быть в настоящее время невозможна. Поэтому, если кто-либо еще пытается это сделать, и видит этот вопрос, я не могу гарантировать, что это невозможно, но по этой ссылке кажется, что это возможно. Поэтому просто нужно будет дублировать весь код tempalte для каждого столбца.