2011-10-08 90 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