我已经开发了一些基于MVVM的WPF代码,并且需要一些小的重构,但在此之前我需要决定最佳架构。
我最初从一个应用程序开始,可以呈现我的数据的几个相似(但单独)的表示。我们称之为具有相应RecordsViewModel
的{{1}}。随着时间的推移,我引入了一个RecordsView
,它被传递到SettingsViewModel
的构造函数中并且可见地发布(允许RecordsViewModel
使用它)。 RecordsView
已注册,以便更改反映在我的所有观看中。
现在我想稍微分开SettingsViewModel
,因为它现在包含两个不同的视图。
我遇到的问题是:
RecordsView
和RecordsMainView
)都希望看到设置。RecordsAlternativeView
不同,这些新视图是从Xaml(默认构造函数)实例化的。所以我的选择似乎是:
RecordsView
,并使Xaml将属性加入实例。DependencyProperty
成为单身人士。还有其他更好的选择吗?你认为哪个最好?
答案 0 :(得分:3)
我会将您的设置逻辑转换为服务(ISettingsService
),并使用服务定位器或依赖注入从任何视图模型需要它来获取该服务。
服务非常适合管理共享状态,服务定位器/ DI使您的VM很容易获得对服务的引用。在VM中存储共享状态有点笨拙 - 正如您所发现的那样 - 并没有真正扩展。一个好的经验法则可能是问自己VM中的状态是否只存在以支持相应的视图,或者其他组件是否需要访问该状态。如果是后者,请将其移至服务中。