Динамические свойства поддерживают набор свойств и получение событий, чтобы можно было определить прослушиватели для этих свойств. Прослушиватели привязаны к определенному динамическому свойству, для которого они определены.
Если удалить динамическое свойство, а затем создать другое динамическое свойство с тем же именем, прослушиватели не будут реагировать на события, созданные новым свойством. Прослушиватель, определенный для динамического свойства, которое было удалено, не вызывает ошибки, но обратный вызов прослушивателя не выполняется.
Свойства - установка и запрос событий предоставляет дополнительные сведения о том, как определить прослушиватели для этих событий.
Чтобы ответить на добавление и удаление динамических свойств, прикрепите прослушиватели к объектам, содержащим динамические свойства. dynamicprops класс определяет события для этой цели:
PropertyAdded - Запускается при добавлении динамического свойства к объекту, производному от 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 =
1PropertyRemoved Выполнение обратного вызова событияУдаление динамического свойства путем вызова delete на meta.DynamicProperty объект, возвращаемый addprop способ. Удаление meta.DynamicProperty объект запускает PropertyRemoved событие.
Удалить meta.DynamicProperty возвращенный при добавлении динамического свойства SpecialProp.
delete(ad)
Обратный вызов выполняется:
SpecialProp removed
Значение HiddenProp сейчас false.
dt.HiddenProp
ans =
0meta.DynamicProperty ОбъектыВы можете получить meta.DynamicProperty объект для динамического свойства с использованием findprop. Использовать findprop если объект не возвращен addprop.
ad = findprop(dt,'SpecialProp');