WPF:应用多个数据模板?

时间:2011-10-08 18:40:49

标签: wpf xaml datatemplate

假设我正在显示数据组件,例如TreeView。

假设它绑定到基本类型TreeViewItem的树结构。

TreeViewItem
    TreeViewItem
    TreeViewItem
        TreeViewItem

等等。

但其中一些项目是TreeViewItem的更具体的实现,例如AnimalTreeViewItem,甚至更细粒度的ZebraTreeViewItem

TreeViewItem
    AnimalTreeViewItem
        ZebraTreeViewItem
    PlantTreeViewItem

现在,假设我希望以类似的方式呈现这些项目,但根据底层类型,渲染会略有不同。

我使用DataTemplate的一种方法是使用它。

问题是我必须为每种类型创建一个单独的模板,其中100%的内容以相同的方式定义(减去布局/颜色等方面的微小差异)

有没有办法定义数据模板,它们将大部分内容共享在一起?意思是,不必创建2个模板,它们的标记几乎完全相同,只是为了改变某些文本框的背景颜色等。

2 个答案:

答案 0 :(得分:1)

您可能对this article中显示的解决方案感兴趣。如果两者之间的差异较小,则可以正常工作,例如某些元素的颜色不同,但它也可以通过使用触发器处理更复杂的场景。

答案 1 :(得分:0)

这个问题的答案是DataTriggers

<DataTemplate x:Key="myTaskTemplate">
  ...
<DataTemplate.Triggers>
  <DataTrigger Binding="{Binding Path=TaskType}">
    <DataTrigger.Value>
      <local:TaskType>Home</local:TaskType>
    </DataTrigger.Value>
    <Setter TargetName="border" Property="BorderBrush" Value="Yellow"/>
  </DataTrigger>
</DataTemplate.Triggers>
  ...
</DataTemplate>

当TaskType为Home时,此数据模板才会被“触发”。

http://msdn.microsoft.com/en-us/library/ms742521.aspx#adding_more_to_datatemplate