2011-02-07 194 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版他們補充它,所以它的實際工作,現在,你已經在你的例子表明它。