在出色的 WPF 和 XAML 中挣扎,我发现了很多信息,例如这个问题, 关于如何将多个 DataTemplate 与数据类型条件一起使用,但我不知道如何将它们连接到 DataGrid 列。
例如,要以不同的方式显示 Material 类中的数据和 Usage 类中的数据,每个类都有一个 Value 字段,这里有两个 DataTemplate:
<Grid.Resources>
<!-- Do NOT set the x:Key -->
<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>
这应该在 DataGrid 中使用,如下所示:
<DataGridTemplateColumn CellTemplate="{StaticResource MyTemplate}">
信息是我不应该使用 DataTemplates 上的 Key 属性。如果我愿意,密钥应该是唯一的,因此每个 DataTemplates 上都不同,而两个模板都应该连接到相同的 DataGrid 列。
我还没有找到一个元素来对多个 DataTemplate 进行分组,以便为它们提供一个集体资源名称。
我还看到代码隐藏的 C# 类实现 DataTemplateSelector 的示例,但这与 XAML 中进行选择的 DataType 属性相反。
我还找不到显示此问题解决方案的 XAML 示例。非常感谢任何帮助。
我认为不可能用
DataGridTextColumn
来做你想做的事情,但用 DataGridTemplateColumn
是可行的。
<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type local:Usage}">
<TextBlock Text="{Binding Value}" Foreground="White" Background="Gray" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:Material}">
<TextBlock Text="{Binding Value}" Foreground="White" Background="Brown" />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
结果