我使用WPF应用程序并使用MVVM模式。我有两个独立的视图和视图模型项目。
在视图中添加了对Unity
的引用,并且我正在使用Unity
将MainWindowViewModel
的{{1}}实例注入到应用的MainWindow
上绑定viewmodel以查看。
现在,我想点击StartUp
视图上的按钮打开MainWindow
的新实例。
问题是如何从Viewmodel创建视图实例。
已经尝试过以下内容:
MainWindow
,这只是另一项工作的R& D.在实际情况中,我们需要显示与系统连接的某些设备的状态,并且每个连接的设备将单独MainWindow
。即使如果我们可以从Window
打开多个子窗口,我也可以。答案 0 :(得分:0)
我就是这样做的:
拥有导航的中心位置。可以是App.xaml.cs,也可以让你拥有。在这个类中,您将拥有IoC容器并控制Window。
然后,您可以使用Messenger系统在ViewModel和ViewModels之间与应用程序进行通信。 MVVM Light Toolkit有一个轻量级的模型。还有其他MVVM框架/工具。 PRISM是微软自己的,但开始时可能很复杂。在PRISM中,这种Messenging机制称为EventAggregator。
ViewModel应该有ICommand
来处理按钮单击(请参阅MVVM Light Toolkit中的RelayCommands)。该命令发送应用程序正在侦听的消息并打开一个新窗口。
Soudo代码:
public class App
{
public void InitializeMessengerHooks()
{
messenger.Subscribe(typeof(OpenWindowMessage), m => OpenWindow());
}
}
public class ViewModel
{
public void OpenWindow()
{
messenger.Send(new OpenWindowMessage());
}
}
关于它是如何工作的粗略想法。