En las cuadrículas de datos WPF, tengo una columna definida como DataGridTemplateColumn que necesitaré utilizar en todo tipo de columnas. Como un ejemplo muy simplificado, por favor considere lo siguiente como muestra de maniquí:Cómo reutilizar WPF DataGridTemplateColumn (incluida la vinculación)
<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>
Para un ejemplo simple, ¿cómo podría aplicar la misma plantilla que se utiliza para la columna con el encabezado = Nombre de la columna con encabezado = Empresa sin tener que reproducir la plantilla completa para cada columna?
he encontrado una respuesta con this previous SO question, donde explican utilizando recursos como:
<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>
que me pone el 95%, pero la última pieza que me falta es cómo manejar el enlace de datos? ¿Cómo creo algún tipo de marcador de posición en la plantilla y luego realizo el enlace real en la cuadrícula?
EDITAR me he mantenido en busca y encuentra la cuestión Create Common DataGridTemplateColumn que suena como lo que yo quiero hacer, de hecho, puede ser imposible actualmente. Entonces, si alguien más está tratando de hacer esto, y ve esta pregunta, no puedo garantizar que sea imposible, pero desde este enlace parece que puede ser. Por lo tanto, solo será necesario duplicar todo el código de tempalte para cada columna.
¿Sería posible ¿ContentPresenter usará una DataTemplate definida en recursos en algún lugar cercano? –