我已经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()
DateOfBirth 工作正常,但要通知 Age 已更改,我应该记得OnPropertyChanged("Age")
在DateOfBirth
. 我觉得这使得代码随着时间的推移难以维护。如果一个新属性依赖于年龄,那也需要在 DateOfBirth 的设置器中通知。有没有更好的方法可以在不调用 OnPropertyChanged("Age") 的情况下做到这一点?