をINotifyPropertyChanged
使用して実装しましたCallerMemberName
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
したがって、これは任意のプロパティのセッターで呼び出すことができます -OnPropertyChanged()
これは、設定されているときはいつでもプロパティ変更イベントを通知します。これは、getter のみのプロパティには当てはまりません。例えば、
private DateTime _dob;
public DateTime DateOfBirth
{
get
{
return _dob;
}
private set
{
_dob = value;
OnPropertyChanged();
OnPropertyChanged("Age");
}
}
public int Age
{
get
{
return DateTime.Today.Year - _dob.Year;
}
}
OnPropertyChanged()
OnPropertyChanged("Age")
DateOfBirth では問題なく動作しますが、Age が変更されたことを通知するには、 のセッター内で呼び出すことを忘れないでくださいDateOfBirth
。これにより、コードを長期間維持することが難しくなっていると思います。新しいプロパティが Age に依存する場合は、DateOfBirth のセッターでも通知する必要があります。OnPropertyChanged("Age") を呼び出さずにこれを行うより良い方法はありますか?