WPF中如何为DataGridTemplateColumn绑定带类型条件的多DataTemplate
纯XAML实现DataGrid列根据数据类型自动匹配DataTemplate
你可以直接利用WPF的隐式DataTemplate机制,结合ContentPresenter实现需求,完全不需要后台代码或DataTemplateSelector:
- 保留你已定义的无
x:Key的隐式DataTemplate(它们会根据数据类型自动匹配):
<Grid.Resources> <DataTemplate DataType="{x:Type models:Material}"> <TextBlock Text="{Binding Value}" Foreground="White" Background="Gray" /> </DataTemplate> <DataTemplate DataType="{x:Type models:Usage}"> <TextBlock Text="{Binding Value}" Foreground="White" Background="Brown" /> </DataTemplate> </Grid.Resources>
- 在
DataGridTemplateColumn的CellTemplate中使用ContentPresenter,绑定当前行的数据:
<DataGridTemplateColumn Header="Value"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <!-- 绑定行数据后,WPF会自动匹配对应DataType的隐式模板 --> <ContentPresenter Content="{Binding}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
原理说明
当ContentPresenter的Content绑定到Material或Usage类型的实例时,WPF会自动在当前资源作用域内查找对应DataType的隐式DataTemplate,并将其应用到单元格中,无需手动指定模板Key,也不需要额外的后台逻辑。
内容的提问来源于stack exchange,提问作者Roland Kwee
相关产品推荐
相关产品推荐

