处理MVVM体系结构中的依赖性

时间:2013-05-30 11:25:10

标签: wpf mvvm

第一个MVVM WPF项目,所以我可能会问一个常见问题,但我无法找到答案的搜索魔法。

我有很多视图,当在其中一个视图中调用某个命令时,我需要禁用其他一些视图。我在我的数据模型中放置了一个布尔标志,指示是否应该启用它们,其他视图可以通过其ViewModel绑定看到该更改。但是模型不是“INotifyPropertyChanged”,因此当我在数据模型中更改该标志时,什么都不会更新。那么要做到这一点需要什么呢?

3 个答案:

答案 0 :(得分:2)

在MVVM中,一种解耦视图模型的方法是使用event aggregator。当您执行命令时,它会引发一个事件。对此活动感兴趣的其他视图模型已设置订阅,并将在事件触发时收到通知。

an answer to the question named "Event Aggregator Implementation Sample / Best Practices"中可以看到非常好的事件聚合器实现。

答案 1 :(得分:1)

评论已经提出了一个可能的解决方案:在模型中实施INotifyPropertyChanged

但是,还有另一种解决方案可以使您的模型更简单,并且您的架构层更少耦合。如果您的VM相互依赖并将模型视为简单数据桶,则可以通过自己的INPC实现通知它们,而不是依赖于模型。换句话说,如果VM A需要知道模型X何时更改,则可以改为附加与VM B(包装模型X)建立关系,而不是直接依赖于模型X.

答案 2 :(得分:0)

这正是您的View-Model的用途!虽然使模型实现INPC没有任何问题,但你当然不应该期望或依赖它。您的View-Model是UI不可知模型和用户界面之间的桥梁。

解决问题的一种典型方法是创建View-Model类,这些类包含实现INPC的Model类。您可以直接绑定到View-Models,允许通过INPC在UI中反映值的更改。