2011-10-08 88 views
0

假设我正在显示一个数据组件,比如TreeView。WPF:应用多个数据模板?

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

TreeViewItem 
    TreeViewItem 
    TreeViewItem 
     TreeViewItem 

等等。

但其中一些项目是树型视图的更具体的实现,比如AnimalTreeViewItem和更为细致的ZebraTreeViewItem

TreeViewItem 
    AnimalTreeViewItem 
     ZebraTreeViewItem 
    PlantTreeViewItem 

现在,比方说,我希望这些商品能以类似的方式来呈现,但仍然会有根据底层类型呈现细微差异。

我得到这个工作的一种方式是使用DataTemplate。

问题是,我必须为每一个类型的一个单独的模板,用(在布局/颜色等减小的差别)

以相同的方式定义内容100%有一种方法以定义数据模板,他们的大部分内容是一起分享的?意思是,无需创建2个模板,它们的标记几乎完全相同,只是为了更改某些文本框的背景颜色等。

回答

1

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

+0

+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> 

该数据模板才会被“触发”当任务类型是首页。

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