2013-10-01 25 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