MainWindow(和MainWindowVM)中有复选框,在检查时应该通知其他窗口(但不是全部),当前我们通过处理事件来做。也就是说每个虚拟机都会订阅一个事件,每当发生变化时我们都会在所有虚拟机中处理它有没有更好的方法呢?
答案 0 :(得分:1)
有没有更好的方法呢?
这消除了发布者和订阅者之间的紧密耦合。事件的订阅者观察事件聚合器而不是发布者,并且发布者仅知道事件聚合器而不知道不同的订户。
这导致代码更容易维护。有关更多信息,请参阅链接。
答案 1 :(得分:0)
您可以使用已有的内容,因此为MainWindow订阅VM的PropertyChanged:
public class NonMainWindowVM : INotifyPropertyChanged
{
public NonMainWindowVM(MainWindowVM mwVM)
{
mwVM.PropertyChanged += MW_PropertyChanged;
}
private void MW_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case nameof(MainWindowVM.ID):
//logic MainWindowVM.ID changed
break;
default:
break;
}
}
}