如何将一个 ViewModel 分成多个?

How to separate a ViewModel in multiple?

根据 的评论,我觉得有必要问这个问题。

这是我目前正在开发的应用程序,为了避免进一步的问题并继续与 Catel 合作(无论我遇到什么麻烦,使用起来都非常愉快),我需要解释一下几个话题。


我有一个 API class(我们称它为 API),它包含几种连接到某些内容管理器并对其执行操作的方法。 我想将单个 class 拆分为多个 Model class(例如,两个即可):

就模型而言,还可以,没什么难的。我的第一个问题来自相关的 ViewModels;我需要在其中的每一个中使用相同的 API 实例。所以现在,我只使用一个 ViewModel,与我的 Models 关联的 UserControls 只是从我的 MainWindow 继承它(这些是常规的 UserControls,不是 Catel 的,否则它会对我大喊大叫没有适合他们的 ViewModels)。

由于 Catel 不太喜欢嵌套视图模型,这是我的问题:

如何 pass/use 各种 ViewModel 之间的参数?(或 如何在不使用嵌套视图模型的情况下分离主 ViewModel?)

当我需要在应用程序中保持状态时,我会为此使用服务。视图模型是视图的表示,并且仅在视图处于活动/可见状态时才会存在。状态不止于此,它需要在不同视图模型中的整个应用程序中进行管理。

因此我总是选择拥有一个保存状态的服务。此服务在 ServiceLocator(IoC 容器)中注册,并将通过依赖注入注入到视图模型中。

这样您就可以在加载视图模型时始终检索信息。最好的方法是在 Initialize 方法中(您也应该在这里订阅您的事件)。您应该在视图模型的 Close 方法中清理您的视图模型(取消订阅事件)。