RelativeSource绑定无法解析

时间:2014-10-06 19:39:41

标签: c# wpf contextmenu relativesource

我在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')

2 个答案:

答案 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}" />