假设你有一个复杂的数据对象。要编辑对象的各种属性,用户最好有多个屏幕,这已经足够复杂了。它本质上是一个配置项目的购物车。
因此,一个屏幕将允许您添加项目。另一种方法是允许您添加对这些项目的修改,即具有关联成本的预先确定的更改。第三个屏幕将允许您为您的项目配置全局设置。
我相信你可以猜到,每个屏幕都在完全相同的购物车上运行,只是改变了其中项目的不同属性和关系。
因此,我们将尝试使用MVVM编写应用程序,在讨论各种屏幕(以及它们之间的导航)时,我们遇到了以下问题:
在使用MVVM时,人们通常如何管理应用程序状态?用户将用来更改屏幕的导航栏将存在于屏幕之外,但是当用户单击它时,人们通常使用什么方法来隐藏一个和显示另一个?
更广泛地说,人们是如何处理全局应用程序状态的?用户一次只能操作一个购物车,一次只能有一个用户登录,一次只能显示一个画面。最好是创建一个单例来存储这些重要属性,并且ViewModels可以保留这些属性的副本,并通过事件聚合器订阅更改?
如你所知,我几乎不知道从哪里开始解决这个问题,所以任何建议都是受欢迎的。
发布于 2011-02-17 03:03:59
我将使用ViewModels来跟踪应用程序状态。
一个ViewModel控制整个应用程序,并处理用户当前所在的页面。应用程序本身绑定到主ViewModel,应用程序屏幕空间的大部分是绑定到ViewModel.CurrentPage的ContentControl。然后使用DataTemplates来确定为用户当前所在页面显示哪个视图
在过去,我对一些对象(比如current user)使用全局单例,如果需要,ViewModels会使用对它的引用。因此,如果我想在页面上显示UserName,我应该在ViewModel中有一个名为UserName的属性,它将返回Global.Instance.CurrentUser.UserName
发布于 2011-02-17 03:12:11
对于你的情况,我会研究一下PRISM。PRISM是一组模式,用于以松散耦合的MVVM方式开发WPF应用程序。

具体地说,对于多屏幕和管理应用程序状态的示例,使用“控制器”将ViewModel (购物车)的各种表示形式的视图加载到单独的“区域”中可能是一个很好的开始。在MSDN上看起来有一篇关于getting started with PRISM的很棒的文章,包括composing user interfaces (区域)。
https://stackoverflow.com/questions/5020812
复制相似问题