INotifyPropertyChanging и проверки: когда я поднимаю PropertyChanging?
INotifyPropertyChanged довольно самоочевидно, и я думаю, что мне ясно, когда поднять это (т. е. когда я закончил обновление значений).
Если я реализую INotifyPropertyChanging, я склонен вызывать событие, как только я вхожу в сеттер или другой метод, который изменяет состояние объектов, а затем продолжаю любые охранники и проверки, которые могут произойти.
поэтому я рассматриваю событие как уведомление о том, что свойство может измениться, но еще не было изменено, и может не закончиться успешно.
Если потребители объекта используют это свойство (например, LINQ to SQL, используя событие для отслеживания изменений), должен ли я держаться и только поднимать событие, как только я проверил, что значения, которые мне были даны, хороши, и состояние объекта допустимо для изменения?
каков контракт на это событие и какие побочные эффекты будут у подписчиков?
3 ответов
Если вашему объекту задано значение, недопустимое для свойства, и вы создаете исключение, вы не должны поднимать PropertyChanging
событие. Вы должны только поднять событие, когда вы решили, что значение будет изменить. Типичный сценарий использования для изменения простого поля:
public T Foo
{ get
{ return m_Foo;
}
set
{ if (m_Foo == value) return; //no need for change (or notification)
OnPropertyChanging("Foo");
m_Foo = value;
OnPropertyChanged("Foo");
}
}
Если вы хотите избежать реализации INotifyPropertyChanged вообще, рассмотрите возможность использования Контроль Обновления .Сети вместо. Это устраняет почти весь бухгалтерский код.