【问题标题】:TreeView: child node's VM being affected by parent selectionTreeView:子节点的 VM 受父选择影响
【发布时间】:2019-04-19 17:31:28
【问题描述】:

以下 TreeView 设置有什么问题?设置父节点VM的selected属性会切换子节点的selected属性。

<TreeView ItemsSource="{Binding Documents}">
  <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True" />
      <Setter Property="IsSelected" Value="{Binding selected}" />
    </Style>
  </TreeView.ItemContainerStyle>

  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
      <HierarchicalDataTemplate.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
          <Setter Property="IsSelected" Value="{Binding selected}" />
        </Style>
      </HierarchicalDataTemplate.ItemContainerStyle>
      <HierarchicalDataTemplate.ItemTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding name}" />
          </StackPanel>
        </DataTemplate>
      </HierarchicalDataTemplate.ItemTemplate>
        <TextBlock Text="{Binding name}" />
      </StackPanel>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

VM 对象如下所示:

public class DocumentVM : ObservableObject
{
    private string _name;
    public string name
    {
      get { return _name; }
      set { Set(ref _name, value); }
    }

    private bool _selected = false;
    public bool selected
    {
      get { return _selected; }
      set { Set(ref _selected, value); }
    }
}

DescriptionVM 非常相似。

例如,如果我运行以下两行:

MyVM.Documents[1].descriptions[0].selected = true;
MyVM.Documents[1].selected = true;

第一行将第二个文档的第一个子节点设置为选中,而第二行将第一个文档节点设置为选中,但将第二个文档的第一个子节点设置为未选中。我确定这是我在那里使用的 DataTemplates 的问题,但无法弄清楚那是什么。

【问题讨论】:

    标签: wpf mvvm treeview datatemplate


    【解决方案1】:

    默认情况下,WPF TreeView 不支持多选,所以第二次选择会自动取消选择第一项。

    有一些方法可以解决这个问题 - 查看this answer

    【讨论】:

    • 啊啊啊啊。为什么我没有想到这个世界?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多