在应用程序中管理多个WPF视图

时间:2009-12-01 18:39:21

标签: wpf mvvm

所以我看到WPF中存在导航服务来维护应用程序的流。我不是真正进入后退和前进型功能的市场。我正在寻找一种在按下特定视图上的按钮时在视图之间切换的好方法。我正在使用MVVM,所以我不确定是否可以让App.xaml.cs可能包含每个View或ViewModel的副本,并让ViewModel命令调用App.xaml.cs来进行切换。也许我应该只是处理按钮上的Click事件并做一些这种情况.Close(); NewWindow.Show();.
与WPF中的许多内容一样,虽然可能有一些简单的解决方案,但这对我来说并不直观。

谢谢!

2 个答案:

答案 0 :(得分:2)

我创建了一个“窗口加载器”类,应用程序类在应用程序启动时实例化。窗口加载器具有一个字典,用于维护视图模型类型和视图类型的关联。它还有一个方法,它接受一个视图模型实例,根据视图模型的类型解析视图,立即显示视图,将视图的datacontext设置为视图模型然后显示它。窗口加载器还在视图模型中注册事件,该事件在窗口要关闭时引发。

窗口加载器实现IWindowLoader接口,并且在每个视图模型中保存对它的引用(当窗口加载器实例化视图模型时,它将自己分配给视图模型中的公共IWindowLoader属性)。因此,任何视图模型都可以导致显示任何其他视图模型,而无需了解视图并且不进行显示本身。此外,可以轻松地模拟窗口加载器进行测试。

当我经历你现在的相同过程时,我发现了许多相同基本模式的例子。我刚刚结束自己。

答案 1 :(得分:2)

解决此问题的方法是引入负责应用程序工作流程的Controllers。他们在应用程序中创建,显示和关闭多个视图。

如何在WPF Application Framework (WAF)项目的示例应用程序中看到它的工作原理。