PropertyChanged

PropertyChanged に対応したメソッドがすでに定義されているわけではありません。INotifyPropertyChanged インターフェース自体は、PropertyChanged というイベントの宣言のみを提供しています。実際のプロパティ変更時の通知は、開発者が PropertyChanged イベントを手動で発火する必要があります。

PropertyChanged の基本的な仕組み

  • PropertyChanged はあくまでイベントです。これを発火するためのメソッド(例えば OnPropertyChanged)は、開発者が自分で定義する必要があります。
  • OnPropertyChanged というメソッド名はよく使われる慣習的な名前で、自動で定義されているものではありません
  • この補助メソッド(OnPropertyChanged)を使って PropertyChanged イベントを発火することで、データバインディングされた UI 要素がプロパティの変更を受け取って再描画します。

例: INotifyPropertyChanged の実装

例えば、以下のように OnPropertyChanged メソッドを自分で定義し、プロパティ変更時に PropertyChanged イベントを発火させます。

using System.ComponentModel;

public class SampleClass : INotifyPropertyChanged
{
private string _name;

public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name)); // プロパティ変更通知
}
}
}

// INotifyPropertyChanged のイベント
public event PropertyChangedEventHandler PropertyChanged;

// PropertyChanged イベントを発火する補助メソッド
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

補足

  • OnPropertyChanged メソッド内で PropertyChanged イベントを発火していますが、これはデフォルトで用意されたメソッドではなく、カスタムメソッドとして定義しています。
  • この方法により、PropertyChanged イベントを使ってバインドされている UI に通知が行き、UI が更新される仕組みになります。

コメント

タイトルとURLをコピーしました