2009-02-27 12 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

+0

Itemsコレクションにはあなたのアイテムが含まれています。ただし、ビジュアルツリーはアイテムをコンテナにラップします。 TreeViewsの場合、コンテナはTreeViewItemです。 –

+0

ケントは絶対に正しいです。各アイテムはItemContainerでラップされ、ItemContainerStyleプロパティで記述されます。 TreeViewの場合、デフォルトのコンテナはTreeViewItemです。 Dr。WPFのItemContainersに関するブログ記事をチェックしてください:http://drwpf.com/blog/Home/tabid/36/EntryID/32/Default.aspx – Adrian

関連する問題