在带有 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 神经引擎的设备上存在错误