我希望有一个关于 MVVM 的简单但人为的问题。
我的 MainWindow 有 1 个控件 - ContentControl,它显示仅有的 2 个 View 之一。我希望能够通过一个按钮在两个 View 之间切换。问题是,按钮将成为每个 View 上的控件。 EG View1 有一个按钮,View2 有一个按钮。 UI 上每次只显示一个 View ,单击按钮将显示另一个 View 。但是,要使其正常工作,意味着 View 的 ViewModel 必须了解 MainWindow 的 ViewModel 才能更改 View 。这似乎是错误的。
问题可能是我的 MainWindow ViewModel。其中一个项目是公共(public)对象 View {get;set},它绑定(bind)到 MainWindows ContentControl。因此,需要从 View 的 View 模型更新此属性。
View 更新 MainWindow 的 ViewModel 是否违反 MVVM 模式?
最佳答案
我不确定我是否完全理解您的问题,但是在 View 模型之间进行通信的一种好方法是通过 EventAggregator 或 Messenger 模式。 这两个以松散耦合的方式实现发布/订阅。
这是 MVVMLight Toolkit 的 Messenger 示例 http://dotnet.dzone.com/articles/mvvm-light-whats-messenger
这是 Prism 的 EventAggregator 的示例,用于在 viemodel 之间进行通信 http://rachel53461.wordpress.com/2011/06/05/communication-between-viewmodels-with-mvvm/
希望这对您有帮助..
编辑:好的,我的回答仍然有效。如果你像上面提到的那样使用发布/订阅,你会告诉 view1
和 view2
发送一个更改 View 消息并定义一个目标(目标可以是 view2
例如)。然后,您将在 MainViewModel
中订阅每个更改 View 消息。当更改 View 消息到达时。 MainViewModel
收到通知并执行一个事件,并且不必知道是谁发送了消息。
请记住,mvvm 只是一种模式,而不是一种宗教......只需使用让你继续前进的东西,并将模式放在你的脑后=)......
关于MVVM - View 是否应该影响 MainWindow ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14956068/