使用相同的数据模板来处理不同类型的数据

4

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

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

10

默认情况下不支持这个,但通常我会将 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

这个功能不是开箱即用的,但是可以通过定义自定义MarkupExtension来实现类似的功能。类似于x:Type扩展。

如果ClassA、ClassB都是从同一个类派生而来的,那么您应该能够在此处放置基类名称以引用它们所有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接