在MainWindow(和MainWindowVM(中检查其他窗口(但不是全部(,请通知MainWindow(和MainWindowvm(的复选框,当前我们正在处理事件。这就是每个VM都会订阅事件,每当发生更改时,我们都会在所有VM中处理它吗?
有什么更好的方法吗?
使用事件聚合器或使者。
这消除了发布者和订户之间的紧密耦合。事件的订阅者观察事件聚合器,而不是发布者,并且发布者仅知道事件聚合器,而不是对不同的订阅者的了解。
这导致代码更容易维护。请参阅链接以获取更多信息。
您可以使用,您已经拥有的东西,因此请订阅MainWindow的VM属性:
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;
}
}
}