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

相关问题