在带有 HierarchicalDataTemplate 的 WPF TreeView 中使用命令

Posted

技术标签:

【中文标题】在带有 HierarchicalDataTemplate 的 WPF TreeView 中使用命令【英文标题】:Using Commands in WPF TreeView with HierarchicalDataTemplate 【发布时间】:2013-01-31 02:58:02 【问题描述】:

有没有办法在树视图中使用带有 HierarchicalDataTemplate 的命令,以便我可以对单击树视图中的项目做出反应? 如果有的话,我更喜欢没有代码隐藏的解决方案。

这是我的树视图:

<TreeView ItemsSource="Binding Main.TreeItems">
    <TreeView.ItemTemplate>                     
        <HierarchicalDataTemplate ItemsSource="Binding Path=Children">
            <TextBlock Text="Binding Path=Header" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>                
</TreeView>

【问题讨论】:

【参考方案1】:

在您的项目 (ViewModel) 上提供 ICommand 类型的属性并绑定到该属性。所以你的项目类会是这样的:

class MyTreeItem

   public MyTreeItem()
   
      this.SomeCommand = /* create command here */ null;
      this.Children = new ObservableCollection<MyTreeItem>();
   

   public ICommand SomeCommand  get; private set; 

   public ObservableCollection<MyTreeItem> Children  get; private set; 

然后您可以在 xaml 中编写:

<TreeView ItemsSource="Binding Main.TreeItems">
    <TreeView.ItemTemplate>                     
       <HierarchicalDataTemplate ItemsSource="Binding Path=Children">
            <TextBlock Text="TemplateBinding Header" />
            <Button Text="My Command" Command="TemplateBinding SomeCommand" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>                
</TreeView>

我认为应该可以,至少上次我使用它时效果相似:)

【讨论】:

确定按钮我可以使用命令属性。但是在树视图中有按钮并不好。 ;-) 有没有办法在点击文本块时做到这一点? ***.com/questions/7003507/… 可能是您正在寻找的 :) 这是一个很好的解决方案,如果我的文本块不在树视图中,它会很好地工作。但是对于我的问题,如果在树视图中使用 textblock 元素,它就不起作用。知道为什么吗? 您确定您使用的是模板绑定吗? 模板绑定不适用于鼠标绑定,我不想在树视图中使用按钮

以上是关于在带有 HierarchicalDataTemplate 的 WPF TreeView 中使用命令的主要内容,如果未能解决你的问题,请参考以下文章

带有 LiveCharts 的 WPF 在运行时添加带有 DataBinding 的系列

如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?

带有自定义层的 CoreML 在带有 Apple 神经引擎的设备上存在错误

如何在本地主机上设置带有和不带有 www 前缀的子域/域

带有核心数据的 NSPredicate,在字符串属性中搜索带有边界的单词

是否应该在带有或不带有 :hover 伪类的规则中设置游标属性?