【发布时间】:2015-02-11 15:55:08
【问题描述】:
我是 MVVM 设计模式的新手,我有这些视图模型:
ClassAViewModel
public class ClassAViewModel : INotifyPropertyChanged
{
private int _nbre = 0;
public int Nbre
{
get
{
return _nbre;
}
set
{
_nbre = value;
PropertyChanged(this, new PropertyChangedEventArgs("Nbre"));
}
}
#region Events
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
还有ClassBViewModel
PUBLIC class ClassBViewModel: INotifyPropertyChanged
{
private Boolean _IsBiggerthanFive = false;
public bool IsBiggerthanFive
{
get
{
return _IsBiggerthanFive;
}
set
{
_IsBiggerthanFive = value;
PropertyChanged(this, new PropertyChangedEventArgs("IsBiggerthanFive"));
}
}
#region Events
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
我需要知道两个视图模型之间是否存在通知机制,即在我的情况下,如果第一个视图模型中的_nbre > 5,第二个视图模型将被通知并且_IsBiggerthanFive 的值将被更改。所以:
- 两个视图模型如何在彼此之间进行通信而不实例化一个?
- 完成这项任务的最佳方法是什么?
【问题讨论】:
-
最直接的方法可能是创建一个包含每个实例的 ViewModel,然后连接事件以在它们之间传递数据。
-
合适的设计模式是调解器。 en.wikipedia.org/wiki/Mediator_pattern
-
另一种方法是使用 Prism 及其 EventAggregator 类。然后 ViewModel A 可以引发一个事件,而 ViewModel B 可以订阅该事件并且不知道/关心谁引发了事件。