代码之家  ›  专栏  ›  技术社区  ›  Ray Hayes

MVVM模式和半全局数据

  •  5
  • Ray Hayes  · 技术社区  · 15 年前

    我已经开发了一些基于MVVM的WPF代码,需要进行一些小的重构,但在此之前,我需要决定最佳的体系结构。

    我最初使用的是一个应用程序,它可以呈现我的数据的几个类似(但独立)表示。让我们称之为 RecordsViewModel 它有一个对应的 RecordsView . 随着时间的推移,我介绍了 SettingsViewModel 它被传递到 记录视图模型 并以可见的方式发布(允许 记录视图 使用它)。这个 设置视图模型 注册到,以便在我的所有视图中反映更改。

    现在我想分开 记录视图 因为它现在包含两个不同的视图。

    我的问题是:

    • 新的( RecordsMainView RecordsAlternativeView )两者都想查看设置。
    • 不像以前 记录视图 这些新视图是以编程方式实例化的,由XAML(默认构造函数)实例化。

    所以我的选择似乎是:

    1. 向上移动树模型以查找具有设置的父级
    2. 设置为 DependencyProperty 并使XAML将属性联接到实例。
    3. 制作 设置视图模型 单身汉

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

    1 回复  |  直到 13 年前
        1
  •  3
  •   Tim Cooper    13 年前

    我会把你的设置逻辑变成服务( ISettingsService )并使用服务定位器或依赖注入从任何视图模型需要的地方获取该服务。

    服务对于管理共享状态非常好,服务定位器/DI使您的虚拟机很容易获得对服务的引用。在虚拟机中存储共享状态有点麻烦,而且——正如您所发现的那样——并不能真正扩展。一个好的经验法则可能是问问自己,虚拟机中的状态是否只存在于支持相应的视图,或者其他组件是否需要访问该状态。如果是后者,则将其移动到服务中。