【问题标题】:RelativeSource binding not resolvingRelativeSource 绑定未解析
【发布时间】:2014-12-01 03:32:53
【问题描述】:

我在 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', 祖先级别='1''。 BindingExpression:Path=DataContext.ExcludeSeasonCommand; 数据项=空;目标元素是'MenuItem'(名称='');目标属性 是“命令”(输入“ICommand”)

【问题讨论】:

    标签: c# wpf contextmenu relativesource


    【解决方案1】:

    另一种常用的解决方案:

    <ContextMenu DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.DataContext}" />
    

    【讨论】:

    • 在这里不起作用,可能与放置在 TreeView 子项上的上下文菜单有关?
    【解决方案2】:

    最后,经过无数次谷歌搜索,我找到了解决方案

    <MenuItem
        Header="Exclude season"
        Command="{Binding DataContext.MyRelayCommand, Source={x:Reference _myTreeView}}" />
    

    因为 HierarchicalDataTemplate 没有出现在可视化树中,所以没有“相对”的来源...

    我希望这可以帮助其他正在拔头发的人......

    【讨论】:

    • 如果您在答案中添加定义 _myTreeView 参考的位置以及如何定义,将会非常有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2012-08-13
    • 2011-06-28
    相关资源
    最近更新 更多