gpt4 book ai didi

wpf - ViewModel 如何知道服务中的数据何时更新?

转载 作者:行者123 更新时间:2023-12-03 00:01:50 24 4
gpt4 key购买 nike

在我的应用程序中,我有几个 ViewModel,它们具有单个服务(存储库、DAO 等),我们将其称为 WidgetService,注入(inject)其中。

假设这些 ViewModel 之一是所有用户小部件的列表。另一种可能是用于编辑/创建这些小部件中的单个小部件的 ViewModel。

用户可以在WidgetListViewModel支持的WidgetListView中查看小部件列表,然后单击按钮添加新小部件。为了创建这个新的小部件,需要新建一个 CreateWidgetViewModel 并将其注入(inject)到某些 UserControl/Window 的 DataContext 中,从而通过 DataTemplates 的魔力在 CreateWidgetViewModel 中显示 CreateWidgetViewModel强>CreateWidgetView。此外,CreateWidgetViewModel的更新不一定发生在WidgetListViewModel的范围内。

WidgetListViewModel 被注入(inject) WidgetService 实例时。 CreateWidgetViewModel 已注入(inject)同一个 WidgetService 实例。

现在,当用户在 CreateWidgetView 中单击save时,WidgetService 上的Save方法将被调用并且该小部件将被持久化。现在需要通知WidgetListViewModel有一个新的Widget要显示!

长时间的积累导致了这个问题:如何让 WidgetListViewModel 知道它需要显示新的 Widget?

我看到了Video其中 Microsoft 的一个人使用 ViewModel 订阅的服务上的事件来执行此类操作。然而,这样做的缺点是,如果服务比 View 模型生命周期更长,那么在服务被 GC 之前, View 模型不会被 GC。我可以将 IDisposable 添加到 ViewModel 中。但是,当 ViewModel 仅通过 DataTemplates 在 UI 中表示时,何时/如何调用 Dispose?

有人对此有什么建议吗?

澄清一下,我想说我对 MVVM 的解释与 Josh Smith 的解释最为相似。至少我的 MVVM 架构与 Crack.Net 源代码中的架构非常接近。

最佳答案

好吧,鉴于目前还没有答案,我想我应该尝试一下,但我不是 MVVM 专家。

事件似乎是解决这个问题的方法。然而,正如您所指出的,如果服务的生命周期超过了 ViewModel,则可能会出现内存泄漏。处理这个问题的最佳方法是使用弱事件监听器。

Weak Events允许您使用弱引用连接到事件,这样,如果源对象被 GC 处理,则事件处理程序不会使源保持事件状态。

关于wpf - ViewModel 如何知道服务中的数据何时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/645557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com