2013-10-01 26 views
3

ContextMenu有一個用戶控件,它將在其他用戶控件中重新使用。問題是想要使用這個Contextmenu的控件需要創建ContextMenuViewModel並填充它的DataContext,這是通常的做法。MVVM查看工廠

有沒有辦法爲View創建一個工廠,這樣它就可以即時創建,而不用擔心它正在消耗它的控件的數據上下文?

+0

我看到你在MVVM世界的時候,這是否包括棱鏡?它用棱鏡變得很簡單,但也可以用直線mvvm來實現。 –

+0

:)不,它不包括棱鏡。 – CarbineCoder

+0

你想從哪裏獲取上下文菜單的數據上下文? –

回答

1

可以使用Locator模式

例:

使用「定位器」,如:

DataContext="{Binding Main, Source={StaticResource Locator}}"> 

有一個在應用程序中創建定位器。

<Application x:Class="XXX.App" 
      xmlns:views="clr-namespace:XXX.Views" 
      xmlns:vm="clr-namespace:XXX.ViewModels" 
      StartupUri="MainWindow.xaml" 
      > 
    <Application.Resources> 
... 
     <vm:ViewModelLocator x:Key="Locator" /> 
...  
    </Application.Resources> 
</Application> 

類 「定位」:

public class ViewModelLocator 
{    
    private static MainViewModel _main;  

    /// Initializes a new instance of the ViewModelLocator class. 

    public ViewModelLocator()    
    {     
     _main = new MainViewModel();    
    }  

    /// Gets the Main property which defines the main viewmodel.    

    public MainViewModel Main 
    {     
    get     
     {    
     return _main;     
     }    
    }   


} 
+0

感謝您的答案讓我驗證這一點,並回到你身邊:) – CarbineCoder