如何将模型对象图的状态暴露给视图模型?

How to expose the state of the model’s object graph to the viewmodel?

我正在加深对 MVVM / 依赖项注入最佳实践的理解,一些看似基本的东西仍然很不清楚。

场景:

  1. 模型(根据 Composition Root 模式组成)由类似于以下内容的 DI 对象图组成:

  1. 图的组成部分(A1、B1等)有状态

  2. 组成部分的状态(A1.StateA1、B1.StateB1等)不仅仅作为图中其他对象的依赖,还需要出现在视图中.

问题:

如果我的理解是正确的,模型不应该迎合任何类型的状态可视化——根据视图的要求格式化数据是视图模型的责任。

这是否意味着视图模型应该了解模型组成的细节,并直接引用例如B2.StateB2(甚至 A1.A2.B1.B2.StateB2)?

我正在尝试做的事情的细节:

我正在设计的具体应用程序作为业务应用程序(本地化软件)的简单扩展,以弥补一些缺失的功能,这些功能在大型本地化项目中特别有用。我的应用模型正在从多个来源获取数据:

我承认该应用程序有点老套,但最终用户的工作效率存在大约 20% 的差异。 :)

主视图模型相当简单,只有几个控件,包括一个 WebBrowser,我正在用组装和格式化的 HTML 数据填充它。这里的关键点是让数据始终保持最新,但我的模型对象为此目的实现了 INotifyPropertyChanged。

Or, is it a good practice to try to separate the state and the behavior, and store all state in a flat object that is easy to consume by the viewmodel?

如果您指的是应用程序使用视图显示的状态,那么是的,它应该被展平,或者最好存储在 ViewModel 本身中。

模型从哪里获取数据?您能否将该数据直接存储在 ViewModel 中,而不是创建一个模型来仅在源和 ViewModel 之间保存数据?

通常在 MVVM 开发中,IoC 的组合根方法是通过 ViewModel 完成的,而不是模型。