【发布时间】:2017-06-08 03:07:05
【问题描述】:
有没有一种方法可以在打开相应窗口时识别由 prism 的 ViewModelLocator 创建的 ChildViewModel 实例?
我想触发 ChildViewModel 应该根据来自 MasterViewModel 的参数加载它的数据。
在代码中,在MasterViewModel中有一个ICommand,负责通过发布事件请求打开一个新的子窗口,并且有对应的订阅者。
public ICommand OpenNewChildWindow()
{
Publish(new OpenNewChildWindowPubSubEvent());
// Maybe I can publish a new PubSubEvent here
// but how can I target just the recently created ChildViewModel?
}
请注意,MasterViewModel 对 UI 实现一无所知。
订阅者在自定义WindowManager 上调用ShowWindow 方法,该方法基本上解析了与传入的ViewModel 对应的视图(在此实例中为窗口)。
public void ShowWindow(Type viewModelType)
{
Type view = ResolveView(viewModelType);
Window w = (Window)Activator.CreateInstance(view);
w.Show();
}
适当的窗口的xaml
ViewModelLocator.AutoWireViewModel="True"
【问题讨论】:
-
这就是为什么你永远不应该使用这些“定位器”的东西。它们使您免于花 5 分钟学习 MVVM 基础知识的几乎难以察觉的不适,并谴责您根据对 MVVM 一无所知的人制定的规则进行一生的痛苦。
-
“根据某人制定的规则做 MVVM 一生的痛苦” - 好点
标签: c# wpf prism prism-6 viewmodellocator