как реализовать механизм Do I Need To Save для контейнера данных?

Предположим, что есть класс BindingList<Person{Name, age}> и класс PersonManager, в которых находится список. В приложении каждый элемент управления привязан к списку пользователей, чтобы им можно было управлять или обновлять. Например. Поле со списком, в котором есть имена людей, элемент управления, который обновляет возраст для выбранного человека и т. д.

Теперь я хочу реализовать для этого механизм «Нужно ли мне сохранять». Каким-то образом пользовательский интерфейс должен знать, был ли изменен PersonManager, чтобы сохранить его.

Мое решение состоит в том, чтобы поймать событие INotifyPropertyChanged, которое реализует Person, и создать событие в PersonManager, которое запускается, когда возникает свойство propertyChangedEvent. Что-то вроде механизма пересылки событий.

Это кажется подверженным ошибкам. Любые предложения о том, как сделать его лучше?


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


Ответы (1)


Если элементы в BindingList реализуют INotifyPropertyChanged, тогда событие BindingList ListChanged сработает, когда сработает одно из событий PropertyChanged элементов.

Поэтому вам нужно только обработать событие BindingList ListChanged в вашем PersonManager и установить грязный логический флаг (грязный является типичным признаком устаревших или несохраненных данных) в вашем PersonManager. Затем приложение может запросить PersonManager, если какие-либо данные грязные. Когда приложение сохраняет данные, оно сообщает PersonManager сбросить грязный флаг. Если ваш PersonManager также обрабатывает сохранение данных, он может сбросить свой собственный флаг.

Надеюсь это поможет.

person Joshua Marble    schedule 03.11.2011