根据我的阅读,MVVM 的优点之一是它提供了分离。这很好,但有时您的 View 可能需要了解周围环境,例如在处理状态时。
在我的项目中,我的一个视图激活了一些后台任务,结果实时显示在屏幕上。问题是,如果我要点击我的文件 -> 新建,我将能够更改视图。在后台任务运行时,这是不可取的。
现在,我可以想办法解决这个问题,但它似乎违背了 MVVM 方法(对于这个项目,我想使用它,即使它也没有意义(让我更好地理解模式的优势/劣势))。
因此,假设我的项目是使用 MainWindow(它具有上下文菜单和显示我的视图的 ContentControl)和单个视图构建的。我可以看到使这项工作的唯一方法是将我的 MainWindow 的一个实例传递给我的 View 的 ViewModel (或者也许通过使用委托也可以)。然后我可以控制菜单等的可见性状态......这似乎是一个糟糕的设计选择,因为我必须为我制作的每个视图(更多工作)都这样做,而且我的系统现在非常紧密耦合。
我认为这一定是一个流行的问题,但我找不到任何建议的方法。
在我看来,拥有一个名为 StateControllingClass 或类似文件的额外文件将是一个很好的答案,但同样,在实例化它们以共享同一个对象时,我是否仍然需要将它作为参数传递给我的所有 ViewModel?
无论如何,我的问题是;使用标准 MVVM 方法(意思是,不使用 MVVM 框架)是否有更好的方法?