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