如何使用事件通知屬性值更改
要觀察屬性值更改,您可以使用 INotifyPropertyChanged 接口,其中包括 PropertyChanged 事件。消費者可以訂閱此事件以檢測特定屬性的變更。
public interface INotifyPropertyChanged { event PropertyChangedEventHandler PropertyChanged; }
透過事件安全實作 INotifyPropertyChanged
雖然 Richard的早期回應引入了不安全的實現,這是一個確保線程安全的修訂版:
public class MyClass : INotifyPropertyChanged { private string imageFullPath; protected void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, e); } protected void OnPropertyChanged(string propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public string ImageFullPath { get { return imageFullPath; } set { if (value != imageFullPath) { imageFullPath = value; OnPropertyChanged("ImageFullPath"); } } } public event PropertyChangedEventHandler PropertyChanged; }
這個實現:
其他特定屬性變更事件
為了獲得額外的粒度,您可以為特定屬性定義單獨的事件,例如:
protected void OnImageFullPathChanged(EventArgs e) { EventHandler handler = ImageFullPathChanged; if (handler != null) handler(this, e); } public event EventHandler ImageFullPathChanged;
在屬性的setter 中,呼叫常規OnPropertyChanged 事件和特定OnImageFullPathChanged
簡化屬性名稱取得(僅限C# 4.5)
最後,對於C# 4.5 及以上版本,利用CallerMemberAttribute 自動提取屬性對於手動字串文字:
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
以上是如何安全地實作 INotifyPropertyChanged 來取得屬性值變更通知?的詳細內容。更多資訊請關注PHP中文網其他相關文章!