因爲ContextMenu
是不是在視覺樹,結合將無法正常工作。 一個簡單的解決方案是使用代理模式,您可以創建一個包裝類繼承DependencyObject
和DependencyProperty
,將保留Window
DataContext
,然後您可以在XAML中擁有代理的資源,並最終綁定您的MenuItem
命令以您通過代理對象所需的命令。
樣品代理:
Public class ProxyClass : DependencyObject
{
Public object Data {get; set;}
public static readonly DependencyProperty DataProperty = DependencyProperty.Register("DataProperty", typeof(object), typeof(ProxyClass), new FrameworkPropertyMetadata(null));
}
如何在XAML中使用:
<Window DataContext="{Binding MyViewModel}">
...
<Window.Resources>
<ProxyClass Data={Binding} x:Key="BindingProxy"/>
</Window.Resources>
...
<MenuItem Command="{Binding Source={StaticResource BindingProxy}, Path=Data.MyDesiredCommand"/>
...
</Window>
這是怎麼回事?的ProxyClass
Data
屬性將綁定到的Window
DataContext
,那麼它所有的comamnds和ProxyClass
資源裏面你ViewModel
的屬性。
這種方法的另一個好處是在多個視圖和項目中的可移植性和重用性。
這就是它!謝謝! – Agzam 2010-09-08 14:36:34
該鏈接已死亡。你能填寫缺失的信息嗎? – 2012-08-08 17:36:25
@Bill我還沒有找到鏈接,但我試圖解釋如何解決問題的方式。 – HCL 2012-08-08 18:32:08