MVVM模式和半全局数据

Ray*_*yes 5 c# wpf mvvm

我已经开发了一些基于MVVM的WPF代码,并且需要一些小的重构,但在此之前我需要决定最好的架构.

我最初从一个应用程序开始,可以呈现我的数据的几个相似(但单独)的表示.让我们称它为RecordsViewModel对应的RecordsView.随着时间的推移,我介绍了一个SettingsViewModel传递给它的构造函数RecordsViewModel并且可见地发布(允许RecordsView使用它).在SettingsViewModel已注册到,这样的变化将反映在所有的我的看法.

现在我想分开RecordsView一点,因为它现在包含两个不同的视图.

我遇到的问题是:

  • 新的(RecordsMainViewRecordsAlternativeView)都希望看到设置.
  • 与以前RecordsView以编程方式实例化的方式不同,这些新视图是从Xaml(默认构造函数)实例化的.

所以我的选择似乎是:

  1. 向上走树模型以查找具有设置的父模型
  2. DependencyProperty在控件上创建设置,并使Xaml将属性加入实例.
  3. SettingsViewModel一个单身人士.

还有其他更好的选择吗?你认为哪个最好?

Ken*_*art 3

我会将您的设置逻辑转换为服务 ( ISettingsService) 并使用服务定位器或依赖项注入从任何需要它的视图模型获取该服务。

服务非常适合管理共享状态,并且服务定位器/DI 使您的虚拟机可以轻松获取对服务的引用。在虚拟机中存储共享状态有点老套,而且正如您所发现的那样,并不能真正扩展。一个好的经验法则可能是问问自己,VM 中的状态是否仅用于支持相应的视图,或者其他组件是否需要访问该状态。如果是后者,请将其移至服务中。