Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当复选框未选中或在事件上时,如何通知多个视图模型?C#WPF_C#_Wpf_Mvvm - Fatal编程技术网

当复选框未选中或在事件上时,如何通知多个视图模型?C#WPF

当复选框未选中或在事件上时,如何通知多个视图模型?C#WPF,c#,wpf,mvvm,C#,Wpf,Mvvm,在检查MainWindow(和MainWindowVM)时,会有复选框。其他窗口(但不是所有窗口)应得到通知,当前我们正在处理事件。也就是说,每个虚拟机都将订阅一个事件,无论何时发生更改,我们都将在所有虚拟机中处理它,有没有更好的方法 有没有更好的办法 使用一个或一个 这消除了发布者和订阅者之间的紧密耦合。事件的订阅者观察事件聚合器而不是发布者,发布者只知道事件聚合器,而不知道不同的订阅者 这导致代码更易于维护。有关更多信息,请参阅链接。您可以使用现有资源,因此请订阅VM for MainWin

在检查MainWindow(和MainWindowVM)时,会有复选框。其他窗口(但不是所有窗口)应得到通知,当前我们正在处理事件。也就是说,每个虚拟机都将订阅一个事件,无论何时发生更改,我们都将在所有虚拟机中处理它,有没有更好的方法

有没有更好的办法

使用一个或一个

这消除了发布者和订阅者之间的紧密耦合。事件的订阅者观察事件聚合器而不是发布者,发布者只知道事件聚合器,而不知道不同的订阅者


这导致代码更易于维护。有关更多信息,请参阅链接。

您可以使用现有资源,因此请订阅VM for MainWindow的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;
        }
    }
}

我建议您使用自定义事件还是PropertyChanged?@Rekshino自定义事件。这是一个选项:VM.PropertyChanged+=?