3
ContextMenu
有一个用户控件,它将在其他用户控件中重新使用。问题是想要使用这个Contextmenu
的控件需要创建ContextMenuViewModel
并填充它的DataContext
,这是通常的做法。MVVM查看工厂
有没有办法为View创建一个工厂,这样它就可以即时创建,而不用担心它正在消耗它的控件的数据上下文?
ContextMenu
有一个用户控件,它将在其他用户控件中重新使用。问题是想要使用这个Contextmenu
的控件需要创建ContextMenuViewModel
并填充它的DataContext
,这是通常的做法。MVVM查看工厂
有没有办法为View创建一个工厂,这样它就可以即时创建,而不用担心它正在消耗它的控件的数据上下文?
可以使用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;
}
}
}
感谢您的答案让我验证这一点,并回到你身边:) – CarbineCoder
我看到你在MVVM世界的时候,这是否包括棱镜?它用棱镜变得很简单,但也可以用直线mvvm来实现。 –
:)不,它不包括棱镜。 – CarbineCoder
你想从哪里获取上下文菜单的数据上下文? –