一、定義
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/zh-hant/n/245368.html
微信掃一掃
支付寶掃一掃