在 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>
举个简单的例子,我如何将用于 Header=Name 的列的相同模板应用到 Header=Company 的列,而不必为每一列复制整个模板?
我已经找到了这个之前的 SO question的答案,他们在其中使用以下资源进行了解释:
<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%,但我缺少的最后一点是如何处理数据绑定?如何在模板中创建某种类型的占位符,然后在网格中进行实际绑定?
编辑 我一直在寻找并发现问题Create Common DataGridTemplateColumn这听起来像我想做的事情实际上目前可能是不可能的。因此,如果其他人曾经试图这样做,并且看到这个问题,我不能保证这是不可能的,但从这个链接看来它可能是。所以只需要复制每一列的所有模板代码。