動的プロパティのイベント
動的プロパティと通常のプロパティ イベント
動的プロパティは、プロパティの set イベントと get イベントをサポートするので、これらのプロパティに対してリスナーを定義できます。リスナーは、それらが定義された特定の動的プロパティにバインドされています。
動的プロパティを削除し、同じ名前の別の動的プロパティを作成すると、リスナーは新しいプロパティによって生成されたイベントに応答しません。削除された動的プロパティに対して定義されたリスナーはエラーの原因にはなりませんが、そのリスナーのコールバックが実行されることはありません。
プロパティの設定とクエリのイベントでは、これらのイベントに対してリスナーを定義する方法の詳細を説明します。
動的プロパティのイベント
動的プロパティの追加および削除に応答するには、動的プロパティを含むオブジェクトにリスナーを付加します。dynamicprops クラスはこのためのイベントを定義します。
PropertyAdded—dynamicpropsクラスから派生するオブジェクトに動的プロパティを追加するとトリガーされます。PropertyRemoved— 動的プロパティに関連付けられているmatlab.metadata.DynamicPropertyオブジェクトを削除したときにトリガーされます。ObjectBeingDestroyed— オブジェクトが破棄されたときにトリガーされます。このイベントはhandleクラスから継承されます。
これらのイベントには、パブリックの listen アクセス (ListenAccess 属性) とプライベートの notify アクセス (NotifyAccess 属性) があります。
PropertyAdded イベントと PropertyRemoved イベントは、event.DynamicPropertyEvent オブジェクトをリスナー コールバックに渡します。イベント データ オブジェクトには、以下の 3 つのプロパティがあります。
PropertyName— 追加または削除される動的プロパティの名前Source— イベントのソースであるオブジェクトのハンドルEventName— イベントの名前 (PropertyAdded、PropertyRemovedまたはObjectBeingDestroyed)
特定のプロパティ名のリスニング
特定の条件の下で動的プロパティを作成するアプリケーションがあるとします。以下を行う場合を考えてみます。
SpecialPropという名前のプロパティが追加されたときに、非表示のプロパティの値をtrueに設定する。SpecialPropが削除されたときに、非表示のプロパティの値をfalseに設定する。
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 イベントがトリガーされます。次のステートメントは、オブジェクトに動的プロパティを追加し、返される matlab.metadata.DynamicProperty オブジェクトを保存します。
ad = addprop(dt,'SpecialProp');動的プロパティを追加すると、コールバック関数 DyPropEvtCb がリスナーによって実行されます。コールバック関数は、HiddenProp プロパティに値 true を代入します。
dt.HiddenProp
ans =
1PropertyRemoved イベント コールバックの実行
addprop メソッドによって返された matlab.metadata.DynamicProperty オブジェクトで delete を呼び出すことにより、動的プロパティを削除します。matlab.metadata.DynamicProperty オブジェクトを削除すると、PropertyRemoved イベントがトリガーされます。
動的プロパティ SpecialProp を追加したときに返される matlab.metadata.DynamicProperty オブジェクトを削除します。
delete(ad)
コールバックが以下を実行します。
SpecialProp removed
HiddenProp の値が false になっています。
dt.HiddenProp
ans =
0matlab.metadata.DynamicProperty オブジェクトを検出する方法
findprop を使用して、動的プロパティの matlab.metadata.DynamicProperty オブジェクトを取得できます。addprop によって返されたオブジェクトがない場合は、findprop を使用します。
ad = findprop(dt,'SpecialProp');