INotifyPropertyChangedのよくある実装
大体こんな感じで安定してきたので書き残し。
BindableBase.cs
public abstract class BindableBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;
RaisePropertyChanged(propertyName);
return true;
}
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
以前まではExpression Tree使ってリファクタリングが効くようにしていたRaisePropertyChangedのオーバーロードがあったりもしたけど、nameof演算子が使えるようになってからは全く使わなくなったので省略。
実際の使い方は以下の通り。
WindowViewModel.cs
public class WindowViewModel : BindableBase
{
private string _labelText;
public string LabelText
{
get => _labelText;
set => SetProperty(ref _labelText, value);
}
}