属性更改通知(INotifyPropertyChanged)——针对ObservableCollection

Posted Lulus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了属性更改通知(INotifyPropertyChanged)——针对ObservableCollection相关的知识,希望对你有一定的参考价值。

问题

在开发webform中,wpf中的ObservableCollection<T>,MSDN中说,在添加项,移除项时此集合通知控件,我们知道对一个集合的操作是CURD
但是恰恰没有Update的时候提供集合通知,也就是说当我Update的时候,虽然"集合内容“已被修改,但是"控件“却没有实现同步更新
INotifyPropertyChanged提供了解决方案。

方案1:INotifyPropertyChanged

传统方式,实现接口INotifyPropertyChanged

public class StudentByINotifyPropertyChanged: INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    //实现INotifyPropertyChanged接口
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string sex;
    private string name;

    public string Sex
    {
        get { return sex; }
        set
        {
            sex = value;
            NotifyPropertyChanged("Sex");
        }
    }

    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            NotifyPropertyChanged("Name");
        }
    }
}

示例代码

https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/PropertyChanged

方案2:采用框架实现好的

mvvmlight的ViewModelBase已实现该方法,使用如下

 
技术分享图片

 

List与ObservableCollection对比

List可检查更改,不能检查增加、删除
ObservableCollection检查增加、删除,不能检查更改




以上是关于属性更改通知(INotifyPropertyChanged)——针对ObservableCollection的主要内容,如果未能解决你的问题,请参考以下文章

从元对象获取属性更改通知

从 setter 更改属性并通知

Usercontrol - 从 ViewModel 通知属性更改

父属性更改时嵌套属性的 WPF 绑定更新通知

如何通知所有窗口静态属性已更改?

PyQt5:属性值更改时通知