MvvM ViewModel到ViewModel通信

时间:2012-11-27 13:56:35

标签: c# mvvm viewmodel mvvm-light

我有两个视图模型ViewModelAViewModelB他们都使用公共DataServiceA来检索名为Theme的用户设置。 ViewModel B可以更改该设置并将其保存到数据库中。发生这种情况时,ViewModelA不会更新该主题值 我一直试图弄清楚正确的行动方案,以便让它更新它并提出一些选择:

  1. 在保存值时让DataService引发属性通知(我不喜欢这样)
  2. 使用MessengerService使它们保持同步。 (我遇到了遇到消息循环的问题)
  3. 将一个ViewModel传递给另一个
  4. 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用事件听起来很合适,如果他们都可以访问DataServiceA,那么在主题发生变化时你是否可以提出事件?

因此..在DataServiceA中,当修改主题时会引发“OnThemeChanged”事件,并且ViewModel可以订阅事件并在引发事件时更新它们的内容。

答案 1 :(得分:0)

如果他们都使用相同的DataServiceA实例,我认为DataServiceA也将实施 INotifyPropertyChanged 并不是一个坏主意Theme属性更改时引发事件。

但如果您不喜欢这个想法,另一个选择是使用 EventAggregator 并发布该事件。我个人认为第一种选择已经足够了,但这是你的呼唤......