Обработка событий

Жизненный цикл компонента карточки предусматривает ряд ключевых событий, которые могут быть обработаны в коде компонента. Обработчики для этих событий уже существуют в базовом классе CardControl, и содержат код, необходимый для нормального функционирования компонента карточки.

Однако, при желании разработчик может переопределить одно или несколько из этих событий, чтобы реализовать в них собственную логику.

При переопределении событий, нужно не забыть вызвать обработчик базового класса!

События жизненного цикла карточки
Рисунок 1. События жизненного цикла карточки

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

Windows-клиент кэширует компонент карточки в памяти после первого обращения к нему, и впоследствии активирует этот же самый компонент при открытии всех карточек такого типа.

Поэтому важно не забывать всегда инициализировать и очищать элементы управления, чтобы в них не осталось данных со времени предыдущей активации.

При использовании базовой карточки BackOffice реализована собственная обработка закрытия карточки — стандартные обработчики событий переопределять не требуется. Вместо этого следует переопределять более специализированные методы сохранения данных:

  • bool CheckDataChanges() — в реализации данного метода необходимо вернуть значение true в случае, если пользователь внес какие-то изменения в карточку в процессе работы с ней, иначе — false.

    Результат метода влияет на то, будет ли предложено пользователю сохранить карточку при её закрытии. Изменения базового объекта карточки будут проверены автоматически.

  • CommitDataChanges() — в данном методе необходимо произвести сохранение всех изменений в карточке, совершенных пользователем на текущий момент.

    Если работа ведется только через ObjectContext, перегружать данный метод нет необходимости — изменения будут сохранены автоматически.

  • RollbackDataChanges() — в данном методе следует произвести отмену совершенных пользователем изменений в карточке.

    Как и в случае с CommitDataChanges, если работа ведется только с объектами, полученными через ObjectContext, данный метод перегружать не надо — контекст автоматически будет возвращен к первоначальному состоянию.