イベントを使用してプロパティ値の変更を通知する方法
プロパティ値の変更を監視するには、PropertyChanged イベントを含む INotifyPropertyChanged インターフェイスを利用できます。 。コンシューマはこのイベントをサブスクライブして、特定のプロパティの変更を検出できます。
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;
プロパティのセッターで、一般的な OnPropertyChanged イベントと特定の OnPropertyChanged イベントの両方を呼び出します。 OnImageFullPathChanged イベント。
プロパティ名の取得の簡素化 (C# 4.5 のみ)
最後に、C# 4.5 以降では、CallerMemberAttribute を利用してプロパティ名を自動的に抽出し、手動文字列リテラルが必要:
protected void OnPropertyChanged( [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); }
以上がプロパティ値変更通知用に INotifyPropertyChanged を安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。