Nei datagrids WPF, ho una colonna definita come DataGridTemplateColumn che dovrò utilizzare su tutti i tipi di colonne. Come un esempio molto semplificato perche il seguito come un esempio fittizio:Come riutilizzare WPF DataGridTemplateColumn (incluso il binding)
<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>
Per un semplice esempio, come ho potuto applicare lo stesso modello utilizzato per la colonna con l'intestazione = Nome alla colonna con l'intestazione = Società senza dover riprodurre l'intero modello per ogni colonna?
ho trovato una risposta con this previous SO question, in cui spiegano che utilizzano risorse come:
<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>
Questo mi arriva al 95% lì, ma l'ultimo pezzo che mi manca è il modo di trattare i dati vincolanti? Come creo qualche tipo di segnaposto nel modello e poi eseguo il binding effettivo nella griglia?
EDIT ho continuato a guardare e ha trovato la domanda Create Common DataGridTemplateColumn che suona come quello che voglio fare può infatti essere impossibile al momento. Quindi, se qualcun altro ha mai provato a farlo, e vede questa domanda, non posso garantire che sia impossibile, ma da questo collegamento sembra che lo sia. Quindi sarà sufficiente duplicare tutto il codice temporaneo per ogni colonna.
Sarebbe possibile per ContentPresenter per utilizzare un DataTemplate definito in risorse da qualche parte nelle vicinanze? –