📅  最后修改于: 2023-12-03 15:38:54.593000             🧑  作者: Mango
当我们需要对对象的属性进行监视,并在属性值发生变化时执行相应操作时,可以使用 INotifyPropertyChanged 接口来实现。
INotifyPropertyChanged 接口定义了 PropertyChanged 事件,当对象的属性值发生变化时,会触发该事件。
public interface INotifyPropertyChanged
{
event PropertyChangedEventHandler PropertyChanged;
}
PropertyChangedEventHandler 委托定义了 PropertyChanged 事件的处理方法,该方法包含两个参数,一个是事件源对象,另一个是 PropertyChangedEventArgs 对象,后者包含了属性名和新值等信息。
public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);
PropertyChangedEventArgs 类包含了属性名和新值等信息。
public class PropertyChangedEventArgs : EventArgs
{
public string PropertyName { get; }
public object NewValue { get; }
// ...
}
我们可以通过以下方式订阅对象的 PropertyChanged 事件:
var obj = new MyClass();
obj.PropertyChanged += HandlePropertyChanged;
其中,HandlePropertyChanged 是我们自己实现的方法,该方法的参数为事件源对象和 PropertyChangedEventArgs 对象。
private void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
{
// 处理属性变化事件
}
当对象的属性值发生变化时,我们需要手动触发 PropertyChanged 事件:
class MyClass : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在属性的 setter 中调用 OnPropertyChanged 方法,将属性名传递给该方法,即可触发 PropertyChanged 事件。
通过实现 INotifyPropertyChanged 接口,我们可以实现对对象属性变化的监视,并在变化时执行相应操作。需要注意的是,我们需要手动触发 PropertyChanged 事件,并将属性名和新值等信息传递给事件处理方法。