在我的应用程序中,我有几个 ViewModel 有一个服务(存储库、DAO 等),我们称它为WidgetService 并注入它们。
假设这些 ViewModel 之一是所有用户小部件的列表。另一个可能是用于编辑/创建其中一个小部件的 ViewModel。
用户可以在WidgetListViewModel支持的WidgetListView中查看小部件列表,然后单击按钮添加新小部件。为了创建这个新的 Widget,创建一个CreateWidgetViewModel并注入到一些 UserControl/Window 的 DataContext 中,因此,通过 DataTemplates 在 CreateWidgetView 中显示CreateWidgetViewModel的魔力。此外,CreateWidgetViewModel的更新不一定发生在WidgetListViewModel的范围内。
当WidgetListViewModel被注入 WidgetService 的实例时。CreateWidgetViewModel被注入了同一个WidgetService实例。
现在,当用户在CreateWidgetView中单击保存时,将调用WidgetService上的Save方法,并且小部件将被持久化。现在需要通知WidgetListViewModel有一个新的 Widget 要显示!
长时间的积累导致了这个问题:我如何让WidgetListViewModel知道它需要显示新的 Widget?
我看过一个视频,其中一个来自 Microsoft 的人使用 ViewModel 订阅的服务上的事件来做这种事情。然而,这样做的缺点是,如果服务比视图模型寿命更长,那么视图模型将不会被 GC 处理,直到服务被 GC 处理。我可以将 IDisposable 添加到 ViewModel。但是,当 ViewModel 仅通过 DataTemplates 在 UI 中表示时,何时/如何调用 Dispose?
有人对此有什么建议吗?
为了澄清,我想说我对 MVVM 的解释最接近 Josh Smith 的解释。至少在我的 MVVM 架构上与 Crack.Net 源代码中的架构非常接近。