INotifyPropertyChanged 接口:向客户端发出某一属性值已更改的通知。
NotifyPropertyChanged 接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。
在WPF中进行数据绑定的时候常常会用到INotifyPropertyChanged接口来进行实现,下面来看一个INotifyPropertyChanged的案例。
下面定义一个Person类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace WpfApp
{
public class Person:INotifyPropertyChanged
{
private String _name = "张三";
private int _age = 24;
private String _hobby = "篮球";
public String Name
{
set
{
_name = value;
if (PropertyChanged != null)//有改变
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));//对Name进行监听
}
}
get
{
return _name;
}
}
public int Age
{
set
{
_age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));//对Age进行监听
}
}
get
{
return _age;
}
}
public String Hobby//没有对Hobby进行监听
{
get { return _hobby; }
set { _hobby = value; }
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
上面定义的这个Person类中,对Name和Age属性进行了监听,但是没有对Hobby进行监听。
通知后 绑定数据控件内数据也会自动更新。
参考地址:https://www.cnblogs.com/wlming/p/5574778.html
另一种方法:
public class Student: BindableBase
{
private string name = string.Empty;
private string age = string.Empty;
public string Name { get=>name;set=> SetProperty(ref name,value); }
public string Age { get => age; set => SetProperty(ref age, value); }
}
public abstract class BindableBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T field, T newValue, [CallerMemberName] string propertyName = null)
{
if (!EqualityComparer<T>.Default.Equals(field, newValue))
{
field = newValue;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
return false;
}
}