2009-02-27 30 views
0

我有一個4級樹形結構,定義如下:我可以自動將HierarchicalDataTemplate項目包裝到TreeViewItem中嗎?

<HierarchicalDataTemplate DataType="{x:Type src:Level1}" ItemsSource="{Binding Path=Level2Items}"> 
    <TextBlock Text="{Binding Path=Level1Name}"/> 
</HierarchicalDataTemplate> 

<HierarchicalDataTemplate DataType="{x:Type src:Level2}" ItemsSource="{Binding Path=Level3Items}"> 
    <TextBlock Text="{Binding Path=Level2Name}"/> 
</HierarchicalDataTemplate> 

<HierarchicalDataTemplate DataType="{x:Type src:Level3}" ItemsSource="{Binding Path=Level4Items}"> 
    <TextBlock Text="{Binding Path=Level3Name}"/> 
</HierarchicalDataTemplate> 
<DataTemplate DataType="{x:Type src:Level4}"> 
    <TextBlock Text="{Binding Path=Level4Name}"/> 
</DataTemplate> 

而且它的偉大工程。唯一的是,我不能以編程方式選擇任何綁定項,因爲它們不是TreeViewItem類型(因此沒有「IsSelected」屬性)。有沒有辦法自動包裝特定容器類型的數據綁定項目(在這種情況下:TreeViewItem)?

回答

3

如果您的項目是在TreeView,他們將被TreeViewItemContainerGenerator自動包裹在TreeViewItem中。你可以做這樣的事情,以確保您的數據類上TreeViewItem地圖的IsSelected屬性的屬性:

<TreeView> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem"> 
      <Setter Property="IsSelected" Value="{Binding MyIsSelectedProperty}"/> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 
+0

不幸的是,你的假設,即綁定物品會自動一個樹型視圖裏麪包裹是不是真的在我的情況(無論出於何種原因)。在TreeView的Items集合的第一個項目上調用GetType()將返回我的類型,而不是類型「TreeViewItem」。有什麼想法嗎?謝謝!! – Pwninstein 2009-02-27 15:34:12

相關問題