INotifyPropertyChanging и проверки: когда мне поднимать PropertyChanging? - PullRequest
11 голосов
/ 04 октября 2008

INotifyPropertyChanged довольно понятен, и я думаю, что у меня есть четкое представление о том, когда поднять этот показатель (т. Е. Когда я закончу обновление значений).
Если я реализую INotifyPropertyChanging, я склонен вызывать событие, как только я вхожу в установщик или другой метод, который изменяет состояние объектов, а затем продолжает любые проверки и проверки, которые могут произойти.

Таким образом, я рассматриваю событие как уведомление о том, что свойство может измениться, но еще не было изменено и может не завершиться успешно.

Если потребители объекта используют это свойство (например, скажем, LINQ to SQL, использующий событие для отслеживания изменений), мне следует удерживать и вызывать событие только после того, как я проверил, что значения, которые мне дали хорошо, а состояние объекта действительно для изменения?

Каков контракт на это событие и какие побочные эффекты будут у подписчиков?

Ответы [ 3 ]

13 голосов
/ 04 октября 2008

Если вашему объекту присваивается значение, которое недопустимо для свойства, и вы генерируете исключение, вы не должны вызывать событие 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");
    }
 }
1 голос
/ 04 октября 2008

В качестве отступления - PostSharp обладает интересной возможностью автоматической реализации INotifyPropertyChanged - примерно так .

0 голосов
/ 30 декабря 2008

Если вы хотите вообще отказаться от реализации INotifyPropertyChanged, рассмотрите возможность использования Update Controls .NET . Это устраняет почти весь бухгалтерский код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...