我在TreeView中有一个ContextMenu
UserControl (DataContext=ViewModel)
|
|
---- TreeView (ItemSource=MyItems)
|
|
----- Items (ItemSource=MyChildrenItems)
|
|
----- ContextMenu
我想将ContextMenuItem的Command绑定到ViewModel中的RelayCommand,我尝试了各种RelativeSource绑定,但似乎没有任何工作......
我应该如何配置RelativeSource绑定?
<ContextMenu>
<MenuItem
Header="Bla"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TreeView}, Path=DataContext.MyRelayCommand}" />
我遇到像
这样的绑定错误找不到引用'RelativeSource的绑定源 FindAncestor,AncestorType ='System.Windows.Controls.TreeView', AncestorLevel = '1'”。 BindingExpression:路径= DataContext.ExcludeSeasonCommand; 的DataItem = NULL; target元素是'MenuItem'(Name ='');目标财产 是'命令'(输入'ICommand')
答案 0 :(得分:1)
最后,经过许多谷歌搜索,我遇到了解决方案
<MenuItem
Header="Exclude season"
Command="{Binding DataContext.MyRelayCommand, Source={x:Reference _myTreeView}}" />
因为HierarchicalDataTemplate没有出现在可视树中,所以没有&#34; relative&#34;来源......
我希望这可以帮助那些拔出头发的人......
答案 1 :(得分:1)
另一种常用的解决方案:
<ContextMenu DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.DataContext}" />