【问题标题】:Binding WPF ContextMenu MenuItem to UserControl Property vs ViewModel Property将 WPF ContextMenu MenuItem 绑定到 UserControl 属性与 ViewModel 属性
【发布时间】:2011-06-22 17:50:06
【问题描述】:

我很难理解 ContextMenu 发生了什么。我知道它被渲染为一个单独的窗口,带有一个单独的可视化树,所以我们不能使用相对绑定来绑定作为用户控件属性公开的命令。例如以下不起作用

<MenuItem Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=TestCommand}" Header="Test" />

但是,如果您将用户控件的数据上下文设置为将命令作为属性公开的视图模型,则以下操作将起作用:

<MenuItem Command="{Binding TestCommand}" Header="Test" />

我不明白的是,如果 ContextMenu 不是可视化树的一部分,它是如何继承 DataContext 的值的。我希望这两个示例的行为相同(即都工作或都失败)。

【问题讨论】:

    标签: wpf data-binding command contextmenu


    【解决方案1】:

    第二个绑定之所以有效,是因为所谓的“继承上下文”。你可以在这里阅读:http://blogs.msdn.com/b/nickkramer/archive/2006/08/18/705116.aspx。基本上这是一种特殊情况,其中某些属性继承所有者对象的数据上下文。因此,例如,继承上下文总是对 Freezable 类型的属性起作用(另一篇关于 Freezables 的有趣文章:http://drwpf.com/blog/category/freezables/)。

    实际上这篇文章说继承上下文在 ContextMenu 上不起作用,但在版本 4 中他们添加了它,所以它现在实际上可以正常工作,正如您在示例中所展示的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2011-02-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多