Я использую некоторые объекты CLR, которые используют интерфейс INotifyPropertyChanged и используют функцию PropertyChanged для обновления привязок WPF.
Симпатичный шаблон:
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Тогда свойство:
private double m_TotalWidgets = 0;
public double TotalWidgets
{
get { return m_TotalWidgets; }
set
{
m_TotalWidgets = value;
RaisePropertyChanged("TotalWidgets");
}
}
Есть ли лучший способ обновить производное значение или даже весь класс?
Скажем, у меня было вычисленное значение:
public double ScaledWidgets
{
get
{
return TotalWidgets * CONSTANT_FACTOR;
}
}
Мне бы пришлось запускать PropertyChanged объекта ScaledWidget при обновлении TotalWidgets, например:
set
{
m_TotalWidgets = value;
RaisePropertyChanged("TotalWidgets");
RaisePropertyChanged("ScaledWidgets");
}
Есть ли лучший способ сделать это? Можно ли «сделать недействительным» весь объект, особенно если есть много производных значений? Я думаю, что было бы отстойно запустить 100 событий PropertyChanged.