绑定到&;isexpanded &;不工作的根节点在TreeView

本文关键字:根节点 TreeView isexpanded 绑定 工作 | 更新日期: 2023-09-27 18:18:47

我有一个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属性,以包括根节点?

绑定到&;isexpanded &;不工作的根节点在TreeView

HierarchicalDataTemplate.ItemContainerStyle设置子元素的样式。如果需要为根目录设置样式,可以使用TreeView.ItemContainerStyle

如果您觉得受此架构的限制(这是公认的愚蠢),您可以使用HierarchicalDataTemplate.ItemContainerStyleSelector

相关文章: