我已经开发了一些基于MVVM的WPF代码,并且需要进行一些小的重构,但是在此之前,我需要确定最佳的体系结构。
我最初从一个应用程序开始,该应用程序可以呈现我的数据的几种相似(但独立)的表示形式。我们将其称为RecordsViewModel
,它具有一个对应的RecordsView
。随着时间的流逝,我介绍了一个SettingsViewModel
,它被传递到RecordsViewModel
的构造函数中并以可见的方式发布(允许RecordsView
使用它)。 SettingsViewModel
已注册到,以便更改反射(reflect)在我的所有 View 中。
现在,我想对RecordsView
进行一点拆分,因为它现在包含两个不同的 View 。
我的问题是:
RecordsMainView
和RecordsAlternativeView
)都想查看“设置”。 RecordsView
不同,这些新 View 是从Xaml(默认构造函数)实例化的。 所以我的选择似乎是:
DependencyProperty
,并使Xaml将Property加入实例。 SettingsViewModel
为单例。 还有其他更好的选择吗?您认为哪一个最好?
最佳答案
我会将您的设置逻辑转换为服务(ISettingsService
),并使用服务定位器或依赖项注入(inject)从任何需要 View 模型的 View 中获取该服务。
服务非常适合管理共享状态,服务定位器/DI使您的VM轻松获得对服务的引用。在虚拟机中存储共享状态有点麻烦,而且-正如您所发现的-并不能真正扩展。一个好的经验法则可能是问自己,VM中的状态是否仅是为了支持相应的 View 而存在,还是其他组件是否需要访问该状态。如果是后者,则将其移至服务中。