有一个用户控件ContextMenu
将在其他用户控件中重复使用。问题是想要使用它的控件Contextmenu
需要创建ContextMenuViewModel
并填充它DataContext
,这是正常的做法。
有没有办法为视图创建一个工厂,以便动态创建它,而不用担心它的数据上下文来自消耗它的控件?
您可以使用定位器模式
前任:
“定位器”的使用,例如:
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;
}
}
}