2009-02-27 8 views
0

Ben tanımladığı bir 4 seviyeli ağaç yapısı vardır:HierarchicalDataTemplate öğelerini TreeViewItem'in içine otomatik olarak sarabilir miyim?

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

Ve harika çalışıyor. Tek şey, programlı olarak ilişkili öğelerimden herhangi birini seçemiyorum, çünkü bunlar TreeViewItem türündendir (ve bu nedenle "IsSeçilmiş" özelliği yoktur). Belirli bir kap türündeki veri maddelerini otomatik olarak sarmalamanın bir yolu var mı (bu durumda: TreeViewItem)? senin öğeler TreeView iseniz

cevap

3

, bunlar otomatik bir TreeViewItem sarılmış olacağım TreeView 'ın ItemContainerGenerator. Eğer veri sınıfı bir özellik için TreeViewItem haritalarda IsSelected özelliğini sağlamak için böyle bir şey yapabilirsiniz:

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

Maalesef bağlı öğeler TreeViewItem içine otomatik olarak sarılmış edilecektir varsayım (benim durumumda doğru değildir Sebebi ne olursa olsun). TreeView Öğeleri koleksiyonundaki ilk öğede GetType() öğesini çağırmak, "TreeViewItem" türünü değil, benim türünü döndürür. Düşüncesi olan var mı? Teşekkürler!! – Pwninstein

+0

Öğeler koleksiyonu, öğeleriniz gerektiği gibi içeriyor. Ancak görsel ağaç, öğenizi bir kapsayıcıya sarar. TreeViews için kap bir TreeViewItem'dir. –

+0

Kent kesinlikle doğru. Her öğe, ItemContainerStyle özelliği tarafından tanımlanan bir ItemContainer'a sarılır. Bir TreeView için, varsayılan kap bir TreeViewItem'dir. WPF'nin ItemContainers'daki blog yazısı: http://drwpf.com/blog/Home/tabid/36/EntryID/32/Default.aspx – Adrian

İlgili konular