MVVM WPF更改窗口并关闭先前的窗口。

19 浏览
0 Comments

MVVM WPF更改窗口并关闭先前的窗口。

作为MVVM架构的初学者,我对于窗口之间的导航有一些疑问。我正在使用MVVM Light框架。

我希望的行为类似于WinForms中的这样:

GeneralWindow gw = new GeneralWindow(); this.Hide(); // 或者 close

gw.Show();

我已经花了几个小时尝试使用messenger找到一些提示,但是我发现我必须在视图中使用代码后台,这不是很符合MVVM的风格。

最好的问候和提前感谢。

0
0 Comments

MVVM WPF中改变窗口并关闭先前窗口的问题出现的原因是MVVM模式中不允许从ViewModel创建新的View,并且从ViewModel中显示窗口是违反MVVM的。解决方法是使用流行的技术,使用ContentControl和DataTemplate来更改View。

具体的解决方法是在Window中使用ContentPresenter来绑定CurrentView,然后根据Window.DataContext的实例类型来显示不同的View。

下面是一个示例代码,演示了如何使用DataTemplates来实现这个功能。它使用了一个ItemsControl来显示ViewModel的列表,并使用Button来切换View。

如果你想要真正打开一个新的窗口,你应该创建一个中间层来使ViewModel不依赖于具体实现的创建新窗口的方式。这里给出了一个示例代码,其中使用了一个接口IWindowFactory来创建新的窗口。

关于如何关闭窗口,有很多种方法。其中一种方法是使用Application.Current.MainWindow.Close()来关闭主窗口。

但是使用工厂模式创建窗口时可能会遇到关闭先前窗口的问题。如果有任何问题,可以随时提问。

0