これを行うには、次のパターンに従います。
- 親クラスの値を計算するためのメソッドを作成し、イベントとバインドできるようにします。
- 親で、子コレクションが変更されたときのイベントリスナーを追加します。これを行うには、子コレクションはArrayCollectionなどである必要があります。
- 変更イベントをインターセプトするときは、手順1で説明したメソッドのBindableメタデータに添付されているイベントを発生させます(または条件付きで発生させます)。
これにより、子が更新されるたびに、親の集約プロパティを監視しているUIが更新されます。
次に例を示します。
public class Parent
{
private var children:ArrayCollection = new ArrayCollection();
public function Parent()
{
children.addEventListener(
CollectionEvent.COLLECTION_CHANGE,
function(evt:CollectionEvent):void
{
if (...)
{
dispatchEvent(new Event("warningStateChanged"));
}
}
);
}
[Bindable("warningStateChanged")]
public function containsWarnings():Boolean
{
for each (var child:Child in children)
{
if (child.hasWarning)
{
return true;
}
}
return false;
}
}