我正在使用MVVM patern来开发我的WPF应用程序。它适用于不相关的页面,意味着如何从一个视图进入另一个视图。
例如 我有一个列表页面,其中一些记录来自一个ViewModel而另一个来自另一个ViewModel,这意味着我的单个View有两个ViewModel。现在我想通过某个事件显示另一个视图。
我正在使用 IsSelected 属性来通知更改。 此机制仅适用于在同一ViewModel 上执行任何操作时,我应该为此类事件做什么。
答案 0 :(得分:2)
作为模式的MVVM是关于分离关注点,提高代码的可测试性等等。因此,您的ViewModel应仅关注应用业务规则并为View提供数据。
您需要结合某种MVC模式使用它,其中Controller的关注点是处理应用程序导航/状态等。
(编辑) 例如,假设您的应用程序具有登录屏幕,因此您创建一个包含用户名和密码的LoginView;可能是一个OK按钮和一个取消按钮。
您创建一个LoginViewModel类来绑定此视图并处理此类中的登录逻辑。
但是一旦应用程序登录,登录ViewModel就不负责知道下一步该去哪里;或者哪个View下一个渲染..也许你想导航到这个用户上一次登录时的最后一个屏幕?根据用户的个人资料,它可能会进入默认屏幕吗?这个决定与登录功能无关......
因此,如果您创建一个Controller类,您可以:实例化LoginViewModel类的实例,然后根据登录结果,根据需要应用业务规则以从范围中删除LoginViewModel,并创建一个新的ViewModel,(例如HomePageViewModel )等等......
最后,您需要让应用知道使用DataTemplates为每个VM使用哪些视图
当然,还有很多其他方法可以让这只特别的猫受伤......这只是一个想法...
只要核心概念仍然存在:使用MVVM以干净,可测试的方式弥合View和Model之间的差距......不要试图让它成为'一种模式适合所有':)
HTH:)
答案 1 :(得分:0)
我同意IanR使用Controller进行工作流程/导航。
WPF Application Framework (WAF)的ViewModel示例显示了如何完成此操作。