一、定义
PropertyChangedEventHandler是一种委托类型(delegate),用于处理一个属性值发生变化事件(property changed event)。当一个对象(object)的某个属性值发生变化,PropertyChangedEventHandler就可以迅速响应事件并执行相应操作。
二、使用
使用PropertyChangedEventHandler 需要分两部分实现:
- 声明并定义一个PropertyChangedEventHandler类型的事件,在其中定义发生变化的属性名和委托方法
- 在属性值变化的set访问器中触发PropertyChangedEventHandler事件
public class Person : INotifyPropertyChanged
{
private string name;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return name; }
set
{
name = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
上面的代码实现了INotifyPropertyChanged接口,定义了PropertyChangedEventHandler类型的事件PropertyChanged。在set访问器中,判断委托方法是否被赋值,如果不为null,则触发PropertyChangedEventHandler事件,传递this作为sender,传递”Name”作为属性名。
接下来定义一个接收PropertyChangedEventHandler事件的方法:
public void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("{0}属性已经被更改", e.PropertyName);
}
在主函数中,实例化Person对象,并订阅事件:
Person person = new Person(); person.PropertyChanged += OnPropertyChanged; person.Name = "李四";
当person对象的Name属性被更改为”李四”时,OnPropertyChanged()方法就会被调用,输出”Name属性已经被更改”。
三、应用场景
PropertyChangedEventHandler常用于WPF、UWP等界面开发框架中。当数据模型(Model)的某个属性值发生变化时,通过PropertyChangedEventHandler事件通知界面(View)更新数据。
例如:
public class Student : INotifyPropertyChanged
{
private string name;
private int age;
public event PropertyChangedEventHandler PropertyChanged;
public string Name
{
get { return name; }
set
{
name = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
public int Age
{
get { return age; }
set
{
age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));
}
}
}
}
在界面开发中,经常使用数据绑定(Data Binding)技术将数据模型和界面进行绑定。在WPF中,可以使用Binding类将Student对象的Name和Age属性与TextBox控件进行绑定:
当Student对象的Name或Age属性发生变化时,PropertyChangedEventHandler事件就会被触发,通知绑定的TextBox控件更新显示内容。
四、注意事项
在使用PropertyChangedEventHandler时需要注意以下几点:
- PropertyChangedEventHandler事件必须先被订阅后才能触发
- 在触发PropertyChangedEventHandler事件时,应该在判断委托方法是否为null
- 必须正确传递sender和e两个参数,sender应该传递事件源对象,e应该传递一个包含被更改的属性名的PropertyChangedEventArgs对象
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245368.html
微信扫一扫
支付宝扫一扫