Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 如何实现属性更改通知_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何实现属性更改通知

C# 如何实现属性更改通知,c#,wpf,mvvm,C#,Wpf,Mvvm,在MVVM中,我应该如何实现INotifyPropertyChanged接口:在ViewModel类中还是在Model类中?如果在ViewModel中实现了INotifyPropertyChanged接口,如何处理模型的属性更改事件?首先,您总是在视图模型中实现它,因为当您更新视图模型中的数据时,框架使用该接口来更新UI 您可以在模型中实现它,但这绝不是必需的。如果模型正在从您下面更改,您可以,而且很可能应该,轻松地引发视图模型侦听的您自己的(语义更清晰的)事件,以便更新其数据 实际实现应该如下

在MVVM中,我应该如何实现INotifyPropertyChanged接口:在ViewModel类中还是在Model类中?如果在ViewModel中实现了INotifyPropertyChanged接口,如何处理模型的属性更改事件?

首先,您总是在视图模型中实现它,因为当您更新视图模型中的数据时,框架使用该接口来更新UI

您可以在模型中实现它,但这绝不是必需的。如果模型正在从您下面更改,您可以,而且很可能应该,轻松地引发视图模型侦听的您自己的(语义更清晰的)事件,以便更新其数据

实际实现应该如下所示():


高质量的回答-如前所述,我通常会使用模型引发事件,其中值的更改超出视图模型的控制范围。对我来说,模型中的Notify感觉像是混浊的mvvm,而且我更喜欢它们是基于域的,并且可以在其他上下文中重用。
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }