2

想象一下,您有一个复杂的数据对象。它足够复杂,要编辑对象的各种属性,最好让用户拥有多个屏幕。它本质上是一个用于配置项目的购物车。

因此,一个屏幕将允许您添加项目。另一种方法是允许您添加对这些项目的修改,即与成本相关的预定更改。第三个屏幕将允许您为您的项目配置全局设置。

我相信你可以猜到,每个屏幕都在完全相同的购物车上运行,只是改变了里面物品的不同属性和关系。

因此,我们将尝试使用 MVVM 编写应用程序,在讨论各种屏幕(以及它们之间的导航)时,我们遇到了以下问题:

人们在使用 MVVM 时通常如何管理应用程序状态?用户用来切换屏幕的导航栏将存在于屏幕之外,但是当用户点击它时,人们通常使用哪些方式来隐藏和显示另一个?

更一般地说,人们如何处理全局应用程序状态?用户一次只能操作一个购物车,一次只能有一个用户登录,一次只能显示一个屏幕。最好创建一个存储这些重要属性的单例,并且 ViewModel 可以保留它们的副本并通过事件聚合器订阅更改?

如您所知,我什至不知道从哪里开始解决这个问题,因此欢迎和接受任何建议。

4

2 回答 2

3

我会使用 ViewModels 来跟踪应用程序状态。

一个 ViewModel 控制整个应用程序,它处理用户当前所在的页面。应用程序本身绑定到主 ViewModel,应用程序屏幕空间的大部分是绑定到 ViewModel.CurrentPage 的 ContentControl。然后使用 DataTemplates 来确定要为用户当前所在的任何页面显示哪个视图

过去,我为某些对象(例如当前用户)使用了全局单例,并且 ViewModel 在需要时使用对此的引用。因此,如果我想在页面上显示 UserName,我将在 ViewModel 中有一个名为 UserName 的属性,它会返回Global.Instance.CurrentUser.UserName

于 2011-02-16T19:03:59.330 回答
1

对于您的情况,我会调查PRISM。PRISM 是一组用于以松散耦合的 MVVM 方式开发 WPF 应用程序的模式。

PRISM 区域管理器示例

具体来说,对于您的多个屏幕和管理应用程序状态的示例,使用“控制器”将 ViewModel(购物车)的各种表示的视图加载到单独的“区域”中可能是一个好的开始。MSDN 上似乎有一篇关于PRISM 入门的精彩文章,包括编写用户界面(区域)。

于 2011-02-16T19:12:11.270 回答