我正在提高对 MVVM / 依赖注入的最佳实践的理解,而一些看似基本的东西仍然很不清楚。
设想:
- 该模型(根据Composition Root模式组成)由类似于以下内容的 DI 对象图组成:
图的组成部分(A1、B1 等)具有状态。
组成部分的状态(A1.StateA1、B1.StateB1 等)不仅作为图中其他对象的依赖关系,还需要出现在视图上。
问题:
- 如何正确地将这种碎片/嵌套状态暴露给视图模型?
如果我的理解是正确的,模型不应该迎合任何类型的状态可视化——视图模型有责任根据视图的要求格式化数据。
这是否意味着视图模型应该知道模型组合的细节,并直接引用例如 B2.StateB2(甚至 A1.A2.B1.B2.StateB2)?
- 或者,尝试将状态和行为分开,并将所有状态存储在易于视图模型使用的平面对象中是一种好习惯吗?
我正在尝试做的细节:
我正在设计的具体应用程序用作业务应用程序(本地化软件)的简单扩展,以弥补在大型本地化项目中特别有用的一些缺失功能。我的应用模型正在从多个来源获取数据:
- 一种来源是通过订阅
Process.HasExited
和来跟踪目标应用程序的进程和窗口状态AddAutomationFocusChangedEventHandler
。 - 另一个来源是通过 PInvokes 定期读取目标进程的私有内存。
- 另外两个来源是 XML(确切地说是 XLIFF)文件,我需要根据我从目标进程的内存中读取的最后一个值来查找节点。此查找生成与本地化软件中的活动本地化单元相关的字符串列表——这是应用程序视图需要传达的主要信息。
我承认该应用程序有点老套,但最终用户的工作效率存在大约 20% 的差异。:)
主视图模型相当简单,只有几个控件,包括我正在用组装和格式化的 HTML 数据填充的 WebBrowser。这里的关键点是让数据始终保持最新,但我的模型对象为此目的实现了 INotifyPropertyChanged。