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

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

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

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

События набора свойств и Запроса предоставляют больше информации о том, как задать прослушиватели для этих событий.

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

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

  • Добавленное свойство Инициированный, когда вы добавляете динамическое свойство в объект, выведенный от класса dynamicprops.

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

  • ObjectBeingDestroyed — Инициированный, когда объект уничтожается. Это событие наследовано от класса handle.

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

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

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

  • Source — Обработайте к объекту, который является источником события

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

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

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

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

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

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

Класс 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');

Похожие темы