对不同类型使用相同的DataTemplate

时间:2012-10-15 16:01:08

标签: c# wpf datatemplate

是否可以对定义的类型选择使用相同的DataTemplate,即如何更改以下示例代码,以便对所有列出的类型使用相同的DataTemplate?

<DataTemplate DataType="{x:Type local:ClassA, ClassB, ...}">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</DataTemplate>

2 个答案:

答案 0 :(得分:7)

默认情况下不支持此功能,但通常我会将DataTemplate的内容放在UserControl或其他DataTemplate中(取决于模板的复杂程度),而且只是为每个课程项目编写一个3行数据模板

<UserControl x:Class="MyUserControl">
   <StackPanel Orientation="Horizontal">
      <Label Content="{Binding Path=Title}"/>
      ...
   </StackPanel>
</UserControl >


<DataTemplate DataType="{x:Type local:ClassA}">
    <local:MyUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ClassB}">
    <local:MyUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ClassC}">
    <local:MyUserControl />
</DataTemplate>

答案 1 :(得分:1)

它不支持开箱即用,但可以通过定义自定义MarkupExtension来执行此类操作。与x类似:类型扩展名。

如果在这里,ClassA,ClassB派生自同一个类,你应该能够将基类名称放在这里以引用它们。