我正在努力了解 ContextMenu 发生了什么。我知道它被渲染为一个单独的窗口,具有一个单独的可视化树,因此我们不能使用相对绑定来绑定作为用户控件的属性公开的命令。例如下列does not work:
<MenuItem Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=TestCommand}" Header="Test" />
但是,如果将用户控件的数据上下文设置为将命令公开为属性的视图模型,则以下操作将起作用:
<MenuItem Command="{Binding TestCommand}" Header="Test" />
我不明白的是,如果 ContextMenu 不是可视化树的一部分,它如何继承 DataContext 的值。我希望这两个示例的行为相同(即都有效或都失败)。
第二个绑定之所以有效,是因为所谓的“继承上下文”。你可以在这里读到它:http://blogs.msdn.com/b/nickkramer/archive/2006/08/18/705116.aspx。基本上,这是一种特殊情况,其中某些属性继承所有者对象的数据上下文。因此,例如,继承上下文始终适用于类型的属性Freezable
(另一篇关于 Freezables 的有趣文章:http://drwpf.com/blog/category/freezables/).
实际上,文章说继承上下文在 ContextMenu 上不起作用,但在版本 4 中他们添加了它,所以它现在实际上可以工作,正如您在示例中所示的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)