Войти



Поиск

Реклама

Полезное:

Новые статьи

Опечатка?

Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!

Счетчики


Возбуждение событий изменения элемента

Есть еще один интерфейс, реализованный в классе BindingList<T>, который вы, возможно, захотите переопределить в своих классах специальных коллекций для развитых сценариев: интерфейс iRaiseitemChangedEvents. В нем определено единственное булево свойство RaisesitemChangedEvents. В реализации класса BindingList<T> это свойство возвращает false, но вы можете при желании переопределить его в производном классе.

Если вы возвращаете true, показывая, что вы возбуждаете события изменения элемента, ожидается, что при изменении элементов в вашей коллекции вы будете возбуждать событие ListChanged. Если элементы вашей коллекции реализуют интерфейс iNotifyPropertyChanged, как было описано выше, это будет происходить автоматически. Но вы можете все равно поддерживать события изменения элемента, даже если объекты вашей коллекции и не поддерживают iNotifyProperetyChanged. Однако к реализации IRaiseitemChangedEvents следует подходить с осторожностью: для больших коллекций она может значительно ухудшить производительность, так как вы должны рефлектировать каждый объект при добавлении его в вашу коллекцию.

Для реализации интерфейса IRaiseitemChangedEvents вы должны для каждого свойства объектов, входящих в ваши коллекцию, предоставить дескриптору свойства возвратно-вызываемый делегат. Ваш возвратный вызов будет активироваться всякий раз, когда значение свойства устанавливается через дескриптор. Довольно странно, что это не экспонируется как событие, новый и имеется действительная ссылка на родительскую коллекцию, при вызове CancelEdit объект удаляет себя из коллекции.

Для завершения модификации нужно добавить в метод AddNewCore класса CustomerCollection код, устанавливающий эту родительскую ссылку в создаваемом объекте:

на которое можно было бы явным образом подписаться; вы должны вызывать методы AddValueChanged и RemoveValueChanged, передавая делегат возвратно-вызываемого метода. В результате вызова AddValueChanged метод, на который указывает делегат, будет вызываться всякий раз, когда значение свойства объекта изменяется посредством вызова метода Setvalue дескриптора свойства, а именно так привязанные к данным элементы управления редактируют источник данных. Все это будет совершенно бесполезно, если какой-то код получит ссылку на объект и будет устанавливать свойство через его установщик в определении свойства. Однако возвратный вызов будет активировать целевой метод всякий раз, когда свойство изменяется через привязанный элемент управления, поскольку именно через дескриптор привязанные элементы управления устанавливают свойства, не имея информации времени компиляции об объектах, к которым они привязаны. Следующий код показывает дополнительные методы, введенные в Binding-Listview<T> для поддержки уведомлений об изменении элемента.




Newer news items:
Older news items:

 
Главная Страница Контактная Информация Поиск по сайту Контактная Информация Поиск по сайту