是View中的一个ViewModel(它的DataContext)以任何方式对MVVM模式有害吗?

Dea*_*uga 5 wpf design-patterns mvvm

假设通过将其转换为VM实例来获取对VM的引用,即ViewModel发布一个EventView正在使用该VM的DataContext订阅者:EventDataContext

vm = DataContext as MainViewModel;
if (vm == null) return;
vm.SomeUIRelatedNotice += DoSomethingUIRelated;
Run Code Online (Sandbox Code Playgroud)

我看到这个的方式,虚拟机仍然是分离的,它的可测试性不会受到任何影响,并且View已经有了对VM的引用所以我认为没有任何问题,但我想听听MVVM纯粹主义者的意见,如果他们认为这是糟糕的设计,对MVVM模式有负面影响,如果是这样,为什么呢?

Adi*_*ter 3

只要视图模型本身不执行任何视图逻辑,我就不认为这会破坏 MVVM 模式。

在你的例子中,视图模型试图以某种方式交互和引导视图,所以你可能应该知道还有其他方法可以实现这种行为,这些方法被认为是更纯粹的 MVVM:

  • 我同意。视图已经了解虚拟机(很可能因此它可以为其指定“DataTemplate”),因此仅在特定于视图的代码的代码隐藏中引用它没有什么坏处。这绝对不理想,但我认为这样做对于克服一些 UI 限制没有什么坏处。我也同意有更好的方法来完成这个特定的例子,例如消息系统。理想情况下,您的视图不应控制应用程序流,例如将事件附加到虚拟机:) (2认同)