绑定到“IsExpanded”不适用于TreeView中的根节点

时间:2014-08-19 18:18:58

标签: c# .net wpf binding treeview

我有一个TreeView,它将在任意层次结构中显示几种不同的数据类型。为此,我要为将在HierarchicalDataTemplate中显示的每种数据类型定义具体的TreeView

<HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}" ItemsSource="{Binding Children}" >
    <HierarchicalDataTemplate.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded" Value="{Binding IsObjectExpanded, Mode=TwoWay}" />
        </Style>
    </HierarchicalDataTemplate.ItemContainerStyle>
    <TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type local:MySecondType}" ItemsSource="{Binding Children}" >
    ...
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type local:MyThirdType}" ItemsSource="{Binding Children}" >
    ...
</HierarchicalDataTemplate>

每个HierarchicalDataTemplate的风格略有不同(上面没有显示),这就是我为每种类型定义不同HierarchicalDataTemplate的原因。

然而,IsExpanded绑定并不像我期望的那样工作。无论源对象的TreeView属性的值如何,IsObjectExpanded的根节点都不会展开。子节点绑定正在按预期工作。

此外,如果我在根节点的IsExpanded定义中将True属性硬编码为HierarchicalDataTemplate(假设我知道哪个类型将位于树的根部),它的 children 显示扩展而不是根节点本身。

我是否正确使用IsExpanded属性?或者是否有另一种方法我应该设置IsExpanded属性以包含根节点?

1 个答案:

答案 0 :(得分:4)

HierarchicalDataTemplate.ItemContainerStyle为您声明模板的项目的子项设置样式。如果您需要为root设置样式,可以使用TreeView.ItemContainerStyle

如果您觉得受到这种架构的限制(这无疑是愚蠢的),您可以使用HierarchicalDataTemplate.ItemContainerStyleSelector