Main Content

動的プロパティのイベント

動的プロパティと通常のプロパティ イベント

動的プロパティは、プロパティの set イベントと get イベントをサポートするので、これらのプロパティに対してリスナーを定義できます。リスナーは、それらが定義された特定の動的プロパティにバインドされています。

動的プロパティを削除し、同じ名前の別の動的プロパティを作成すると、リスナーは新しいプロパティによって生成されたイベントに応答しません。削除された動的プロパティに対して定義されたリスナーはエラーの原因にはなりませんが、そのリスナーのコールバックが実行されることはありません。

プロパティの設定とクエリのイベントでは、これらのイベントに対してリスナーを定義する方法の詳細を説明します。

動的プロパティのイベント

動的プロパティの追加および削除に応答するには、動的プロパティを含むオブジェクトにリスナーを付加します。dynamicprops クラスはこのためのイベントを定義します。

  • PropertyAddeddynamicprops クラスから派生するオブジェクトに動的プロパティを追加するとトリガーされます。

  • PropertyRemoved — オブジェクト、または動的プロパティに関連付けられている matlab.metadata.DynamicProperty オブジェクトを削除したときにトリガーされます。

  • ObjectBeingDestroyed — オブジェクトが破棄されたときにトリガーされます。このイベントは handle クラスから継承されます。

これらのイベントには、パブリックの listen アクセス (ListenAccess 属性) とプライベートの notify アクセス (NotifyAccess 属性) があります。

PropertyAdded イベントと PropertyRemoved イベントは、event.DynamicPropertyEvent オブジェクトをリスナー コールバックに渡します。イベント データ オブジェクトには、以下の 3 つのプロパティがあります。

  • PropertyName — 追加または削除される動的プロパティの名前

  • Source — イベントのソースであるオブジェクトのハンドル

  • EventName — イベントの名前 (PropertyAddedPropertyRemoved または 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 =

     1

PropertyRemoved イベント コールバックの実行

addprop メソッドによって返された matlab.metadata.DynamicProperty オブジェクトで delete を呼び出すことにより、動的プロパティを削除します。matlab.metadata.DynamicProperty オブジェクトを削除すると、PropertyRemoved イベントがトリガーされます。

動的プロパティ SpecialProp を追加したときに返される matlab.metadata.DynamicProperty オブジェクトを削除します。

delete(ad)

コールバックが以下を実行します。

SpecialProp removed

HiddenProp の値が false になっています。

dt.HiddenProp
ans =

     0

matlab.metadata.DynamicProperty オブジェクトを検出する方法

findprop を使用して、動的プロパティの matlab.metadata.DynamicProperty オブジェクトを取得できます。addprop によって返されたオブジェクトがない場合は、findprop を使用します。

ad = findprop(dt,'SpecialProp');

関連するトピック