как да внедря механизъм „Трябва ли да запазя“ за контейнер с данни?

Да приемем, че има клас BindingList<Person{Name, age}> и клас PersonManager, които хостват списъка. В приложението всяка контрола е свързана със списъка с лица, за да може да се манипулира или да се актуализира. напр. Списъчно поле с имената на лицата, контрола, която актуализира възрастта на избраното лице и т.н.

Сега искам да внедря механизъм „Трябва ли да спестя“ за това. По някакъв начин потребителският интерфейс трябва да знае дали PersonManager е променен, за да го запази.

Моето обаче е да хвана събитието INotifyPropertyChanged, което Person внедрява, и да създам събитие в PersonManager, което се задейства, когато се повдигне propertyChangedEvent. Нещо като механизъм за пренасочване на събития.

Това изглежда е податливо на грешки. Някакви предложения как да го подобря?


person Odys    schedule 27.08.2011    source източник


Отговори (1)


Ако елементите в BindingList прилагат INotifyPropertyChanged, тогава събитието ListChanged на BindingList ще се задейства, когато едно от събитията PropertyChanged на елементите се задейства.

Следователно трябва само да обработите събитието ListChanged на BindingList във вашия PersonManager и да зададете мръсен булев флаг (мръсен е типичният знак за остарели или незапазени данни) във вашия PersonManager. След това приложението може да попита PersonManager дали някои данни са мръсни. Когато приложението запише данните, то казва на PersonManager да нулира мръсния флаг. Ако вашият PersonManager също обработва запазването на данните, тогава той може да нулира собствения си флаг.

Надявам се това да помогне.

person Joshua Marble    schedule 03.11.2011