我使用 WPF 应用程序并为此使用 MVVM 模式。我有两个单独的 View 和 View 模型项目。
在 View 中添加了 Unity
的引用,我正在使用 Unity
将我的 MainWindowViewModel
实例注入(inject)到应用程序 MainWindow
上的 StartUp
View 中,并能够将 View 模型绑定(bind)到 View 。
现在,我想在单击 MainWindow
View 上的按钮时打开 MainWindow
的新实例。
问题是如何从 Viewmodel 创建 View 实例。
已经尝试过以下方法:
编辑:
回答Wills questions
MainWindow
,这只是另一个工作的研发。在实际场景中,我们需要显示与系统连接的某些设备的状态,并且每个连接的设备都会有单独的 Window
。即使我们可以从 Mainwindow
打开多个子窗口,我也可以。 最佳答案
这就是我以前的做法:
有一个导航的中心位置。可能是 App.xaml.cs 或者您可以拥有自己的。在这个类中,您将拥有您的 IoC 容器并控制窗口。
然后,您可以使用 Messenger 系统在 ViewModel 和 ViewModel 之间与应用程序进行通信。 MVVM Light Toolkit为此有一个轻量级模型。还有其他 MVVM 框架/工具。 PRISM 是 Microsoft 自己的,但一开始可能会很复杂。在 PRISM 中,这种消息传递机制称为 EventAggregator。
ViewModel 应该有一个 ICommand
处理按钮单击(请参阅 MVVM Light Toolkit 中的 RelayCommands)。该命令发送应用程序正在监听的消息并打开一个新窗口。
搜多代码:
public class App
{
public void InitializeMessengerHooks()
{
messenger.Subscribe(typeof(OpenWindowMessage), m => OpenWindow());
}
}
public class ViewModel
{
public void OpenWindow()
{
messenger.Send(new OpenWindowMessage());
}
}
大致了解它是如何工作的。
关于c# - 如何使用 Unity 从 ViewModel 创建新的窗口实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099788/