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

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

<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绑定无法按我期望的方式工作.不管源对象的IsObjectExpanded属性的值如何,TreeView的根节点都不会扩展.子节点绑定按预期工作.

另外,如果我在根节点的HierarchicalDataTemplate定义中将IsExpanded属性硬编码为True(假设我知道哪种类型将位于树的根),则其子级将显示为展开状态,而不是根节点本身.

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

解决方法:

HierarchicalDataTemplate.ItemContainerStyle设置要为其声明模板的项的子项的样式.如果需要为根设置样式,则可以使用TreeView.ItemContainerStyle.

如果您受到此体系结构的限制(这很愚蠢),则可以使用HierarchicalDataTemplate.ItemContainerStyleSelector.

上一篇:c#-TreeView多次触发BeforeSelect事件


下一篇:CodeGo.net>如何将自引用表绑定到WPF TreeView