gpt4 book ai didi

.net - 更改 MVVM 中其他 View 的状态

转载 作者:行者123 更新时间:2023-12-03 10:23:30 24 4
gpt4 key购买 nike

根据我的阅读,MVVM 的优点之一是它提供了分离。这很好,但有时您的 View 可能需要了解周围环境,例如在处理状态时。

在我的项目中,我的一个 View 激活了一些后台任务,结果实时显示在屏幕上。问题是,如果我要点击我的文件 -> 新建,我将能够更改 View 。在后台任务运行时,这是不可取的。

现在,我可以想办法解决这个问题,但它似乎违背了 MVVM 方法(对于这个项目,我想使用它,即使它也没有意义(让我更好地理解模式的优势/劣势))。

因此,假设我的项目是使用 MainWindow(它具有上下文菜单和显示我的 View 的 ContentControl)和单个 View 构建的。我可以看到使这项工作的唯一方法是将我的 MainWindow 的一个实例传递给我的 View 的 ViewModel (或者也许通过使用委托(delegate)也可以)。然后我可以控制菜单等的可见性状态......这似乎是一个糟糕的设计选择,因为我必须为我制作的每个 View (更多工作)都这样做,而且我的系统现在非常紧密耦合。

我认为这一定是一个流行的问题,但我找不到任何建议的方法。

在我看来,拥有一个名为 StateControllingClass 或类似文件的额外文件将是一个很好的答案,但同样,在实例化它们以共享同一个对象时,我是否仍然需要将它作为参数传递给我的所有 ViewModel?

无论如何,我的问题是;使用标准 MVVM 方法(意思是,不使用 MVVM 框架)是否有更好的方法?

最佳答案

我认为您应该查看事件聚合器模式。主要思想是在事件聚合器中注册的所有 View 模型。如果发生某些事情,您可以将事件发布到聚合器。聚合器将事件传递给所有感兴趣的 View 模型。因此,您可以轻松地保持应用程序的固态。
您可以在 Jeremy Miller blogpost 中阅读更多内容,看看这个implemented in Caliburn.Micro框架。

关于.net - 更改 MVVM 中其他 View 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771524/

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