2013-05-06 38 views
2

我的應用程序需要打開UserControl,需要有一個parameter/property才能包含一年。 今年我將有我的控制顯示一些編輯值。在資源中分配和使用WPF DataContext的正確方法

我遇到了問題,我的Window.Resource部分我宣佈有一個contextmenu,我正在致力於Gridview。從這個contextmenu在資源我不能直接綁定到我的Commands我的ViewModel

我通過在我的Xaml中添加我的ViewModel作爲StaticResource來解決此問題。不幸的是,這導致我的xaml生成我的ViewModel,並且我不可能通過我的參數或屬性'year',並且當我檢索我的數據時,它將在year = 0時完成。

有沒有辦法替代我提供給我的contextmenu的viewmodel綁定,以便它可以訪問我在代碼中設置的viewmodel?

<UserControl.Resources> 
    <vm:ViewModel x:Key="viewModel" /> 

    <ribbon:ContextMenu x:Key="MyContextMenu" 
         x:Shared="False" 
         Placement="MousePoint" > 
     <ribbon:Menu Focusable="false"> 
      <ribbon:Button 
       Command="{Binding Source={StaticResource viewModel}, Path=MyCommand}" 
       Label="MyLabel"/> 
     </ribbon:Menu> 
    </ribbon:ContextMenu> 

</UserControl.Resources> 

回答

2

是的,這是可能的。你可以創建一個虛擬類,其持有的DataContext:

public class Proxy:DependencyObject 
{ 
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(Proxy)); 
    public object Data 
    { 
     get { return this.GetValue(DataProperty); } 
     set { this.SetValue(DataProperty, value); } 
    } 
} 

引用它的資源和在DataContext綁定到它的數據屬性:

<UserControl.Resources> 
    <local:Proxy x:Key="proxy" Data="{Binding}"/> 
</UserControl.Resources> 

現在的數據屬性保存您的視圖模型和你可以這樣綁定到它:

<ribbon:ContextMenu x:Key="MyContextMenu" 
        x:Shared="False" 
        Placement="MousePoint" > 
    <ribbon:Menu Focusable="false"> 
     <ribbon:Button 
      Command="{Binding Source={StaticResource proxy}, Path=Data.MyCommand}" 
      Label="MyLabel"/> 
    </ribbon:Menu> 
</ribbon:ContextMenu> 
+0

我可以使用這一個:)我會嘗試實現這個添加靜態當前Propoerty到我的ViewModel並分配正確的一個:) – JMan 2013-05-06 13:12:20