【问题标题】:Binding to "IsExpanded" not working for root node in TreeView绑定到“IsExpanded”不适用于 TreeView 中的根节点
【发布时间】:2014-10-12 23:05:11
【问题描述】:

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

【问题讨论】:

    标签: c# .net wpf binding treeview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多