2011-02-07 143 views
3

我在努力理解ContextMenu发生了什么。我知道它是作为一个单独的窗口呈现的,并带有一个单独的可视化树,所以我们不能使用相对绑定来绑定作为用户控件属性公开的命令。例如以下工作:将WPF ContextMenu MenuItem绑定到UserControl属性vs ViewModel属性

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

但是,如果你设置的用户控件,它公开命令属性视图模型的数据背景下,下面的工作:

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

我不明白的是,如果ContextMenu不是可视树的一部分,ContextMenu如何继承DataContext的值。我希望这两个例子的表现都一样(即两种工作或两种都失败)。

回答

3

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

其实,文章说,继承上下文不上的ContextMenu工作,但在第4版他们补充它,所以它的实际工作,现在,你已经在你的例子表明它。

相关问题