ContextMenu
有一个用户控件,它将在其他用户控件中重复使用。问题是想要使用此 Contextmenu
的控件需要创建 ContextMenuViewModel
并填充其 DataContext
,这是正常做法。
有没有办法为 View 创建一个工厂,这样它就可以即时创建,而不用担心来自正在使用它的控件的数据上下文?
最佳答案
你可以使用定位器模式
例如:
“定位器”的使用,例如:
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;
}
}
}
关于c# - MVVM 中 View 的工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19112091/