MVVM模式和半全局数据

时间:2009-08-17 09:00:36

标签: c# wpf mvvm

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

我最初从一个应用程序开始,可以呈现我的数据的几个相似(但单独)的表示。我们称之为具有相应RecordsViewModel的{​​{1}}。随着时间的推移,我引入了一个RecordsView,它被传递到SettingsViewModel的构造函数中并且可见地发布(允许RecordsViewModel使用它)。 RecordsView已注册,以便更改反映在我的所有观看中。

现在我想稍微分开SettingsViewModel,因为它现在包含两个不同的视图。

我遇到的问题是:

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

所以我的选择似乎是:

  1. 向上走树模型以查找具有设置
  2. 的父级
  3. 在控件上设置RecordsView,并使Xaml将属性加入实例。
  4. DependencyProperty成为单身人士。
  5. 还有其他更好的选择吗?你认为哪个最好?

1 个答案:

答案 0 :(得分:3)

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

服务非常适合管理共享状态,服务定位器/ DI使您的VM很容易获得对服务的引用。在VM中存储共享状态有点笨拙 - 正如您所发现的那样 - 并没有真正扩展。一个好的经验法则可能是问自己VM中的状态是否只存在以支持相应的视图,或者其他组件是否需要访问该状态。如果是后者,请将其移至服务中。