Динамические свойства поддерживают набор свойств и получают события, таким образом, можно задать прослушиватели для этих свойств. Прослушиватели связаны с конкретным динамическим свойством, для которого они заданы.
Если вы удаляете динамическое свойство, и затем создаете другое динамическое свойство с тем же именем, прослушиватели не отвечают на события, сгенерированные новым свойством. Прослушиватель, заданный для динамического свойства, которое было удалено, не вызывает ошибку, но обратный вызов прослушивателя никогда не выполняется.
События набора свойств и Запроса предоставляют больше информации о том, как задать прослушиватели для этих событий.
Чтобы ответить на сложение и удаление динамических свойств, присоедините прослушиватели объектов, содержащих динамические свойства. Класс 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');