PropertyChangedEventHandler の仕組み
PropertyChangedEventHandlerは、プロパティの値が変更された際のイベントを処理するために使用するデリゲートであり、プロパティ変更通知を実装するための一般的なパターンです。
プロパティの値が変更されると、PropertyChangedイベントがトリガーされ、イベントハンドラにプロパティ名がパラメータとして渡されます。このイベントハンドラは、UI要素の更新、計算の実行、または他のイベントのトリガーなど、プロパティの変更に関連する任意の処理を実行できます。
PropertyChangedEventHandler の仕組みは次のとおりです。
- プロパティを定義し、そのセッターメソッドでPropertyChangedイベントを発生させます。たとえば:
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
- PropertyChangedイベントを宣言します
public event PropertyChangedEventHandler PropertyChanged;
- protected virtual OnPropertyChanged メソッドを作成して、PropertyChanged イベントを発生させます:
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
- PropertyChangedイベントを購読するクラスでは、+= 演算子を使用してイベントハンドラを PropertyChanged イベントに追加できます。イベントハンドラは必要に応じてアクションを実行します。
public class MyClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set
{
_myProperty = value;
OnPropertyChanged(nameof(MyProperty));
}
}
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MySubscriber
{
public MySubscriber()
{
MyClass myObject = new MyClass();
myObject.PropertyChanged += HandlePropertyChanged;
}
private void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "MyProperty")
{
// Do something when MyProperty changes
}
}
}
MyPropertyの値が変わった際にPropertyChangedイベントが呼び出され、HandlePropertyChangedメソッドに「MyProperty」を引数として渡されます。HandlePropertyChangedメソッドでは、プロパティの変更にともなって必要な処理を行うことができます。
監視対象のオブジェクトのプロパティに変更があったことが委任とイベントのメカニズムを通じて通知される機能を提供しており、開発者はプロパティ値の変化に適切な処理を行うことができます。