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
你想從哪裏獲取上下文菜單的數據上下文? –