Динамические события свойств

Динамические свойства и события обыкновенных свойств

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

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

Набор свойств и Query Events предоставляют дополнительные сведения о том, как задать прослушиватели для этих событий.

События динамических свойств

Чтобы ответить на сложение и удаление динамических свойств, присоедините прослушиватели к объектам, содержащим динамические свойства. The dynamicprops класс определяет события для этой цели:

  • PropertyAdded - Запускается, когда вы добавляете динамическое свойство к объекту, выведенному из dynamicprops класс.

  • PropertyRemoved - Запускается при удалении объекта или meta.DynamicProperty объект, сопоставленный с динамическим свойством.

  • ObjectBeingDestroyed - срабатывает при уничтожении объекта. Это событие наследуется от handle класс.

Эти события имеют открытый доступ к прослушиванию (ListenAccess атрибут) и частный доступ к уведомлениям (NotifyAccess атрибут).

The PropertyAdded и PropertyRemoved события проходят event.DynamicPropertyEvent объект для обратных коллбэков прослушивателя. Объект данных о событиях имеет три свойства:

  • PropertyName - Имя добавляемого или удаляемого динамического свойства

  • Source - Указатель на объект, который является источником события

  • EventName - Имя события (PropertyAdded, PropertyRemoved, или ObjectBeingDestroyed)

Прослушивать конкретное имя свойства

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

  • Установите значение скрытого свойства равным true когда свойство с именем SpecialProp добавляется.

  • Установите значение скрытого свойства равным false когда SpecialProp удаляется.

Используйте event.DynamicPropertyEvent данные о событиях для определения имени свойства и его добавления или удаления.

The DynamTest класс выводится из dynamicprops. Он задает скрытое свойство, HiddenProp.

classdef DynamTest < dynamicprops
   properties (Hidden)
      HiddenProp
   end
end

Задайте функцию обратного вызова, которая использует EventName свойство данных о событиях, чтобы определить, добавлено ли свойство или удалено. Получите имя свойства от PropertyName свойство данных о событиях. Если динамическое свойство имеет имя SpecialProp, измените значение скрытого свойства.

function DyPropEvtCb(src,evt)
   switch evt.EventName
      case 'PropertyAdded'
         switch evt.PropertyName
            case 'SpecialProp'
               % Take action based on the addition of this property
               %...
               %...
               src.HiddenProp = true;
               disp('SpecialProp added')
            otherwise
               % Other property added
               % ...
               disp([evt.PropertyName,' added'])
         end
      case 'PropertyRemoved'
         switch evt.PropertyName
            case 'SpecialProp'
               % Take action based on the removal of this property
               %...
               %...
               src.HiddenProp = false;
               disp('SpecialProp removed')
            otherwise
               % Other property removed
               % ...
               disp([evt.PropertyName,' removed'])
         end
   end
end

Создайте объект DynamTest класс.

dt = DynamTest;

Добавьте прослушиватель для обоих PropertyAdded и PropertyRemoved события.

lad = addlistener(dt,'PropertyAdded',@DyPropEvtCb);
lrm = addlistener(dt,'PropertyRemoved',@DyPropEvtCb);

PropertyAdded Выполнение обратного вызова события

Добавление динамического свойства запускает PropertyAdded событие. Этот оператор добавляет динамическое свойство объекту и сохраняет возвращенное meta.DynamicProperty объект.

ad = addprop(dt,'SpecialProp');

Сложение динамического свойства заставляет прослушиватель выполнять свою функцию обратного вызова DyPropEvtCb. Функция обратного вызова присваивает значение true на HiddenProp свойство.

dt.HiddenProp
ans =

     1

PropertyRemoved Выполнение обратного вызова события

Удалите динамическое свойство путем вызова delete на meta.DynamicProperty объект, который возвращается addprop способ. Удаление meta.DynamicProperty объект запускает PropertyRemoved событие.

Удалите meta.DynamicProperty объект, возвращенный при добавлении динамического свойства SpecialProp.

delete(ad)

Обратный коллбэк выполняет:

SpecialProp removed

Значение HiddenProp теперь false.

dt.HiddenProp
ans =

     0

Как найти meta.DynamicProperty Объекты

Вы можете получить meta.DynamicProperty объект для динамического свойства, используя findprop. Использование findprop если у вас нет объекта, возвращенного addprop.

ad = findprop(dt,'SpecialProp');

Похожие темы