私の解決策は次のとおりです。ArrayCollectionから派生した新しいクラスを作成しました。SourceCollectionという名前を付けます。weakKeysをtrueに設定して作成された辞書である新しいプライベートメンバーを追加しました。新しいパブリック関数は、その要素から新しいArrayCollectionを作成し、この作成されたコレクションの参照を次のようにプライベートディクショナリに追加します。
public function createCollection():ArrayCollection
{
var result:ArrayCollection = new ArrayCollection();
result.addAll(this);
createdCollections[result] = null;
return result;
}
addItemAt、removeItemAt、およびremoveAll関数をオーバーライドしました。それぞれがスーパー関数を呼び出してディクショナリを反復処理し、適切な関数を実行します。addItemとaddAllもaddItemAtを呼び出すため、これらをオーバーライドする必要はありません。一例は次のとおりです。
override public function addItemAt(item:Object, index:int):void
{
super.addItemAt(item, index);
for (var coll:Object in createdCollections)
{
(coll as ArrayCollection).addItemAt(item, index);
}
}
また、辞書を反復処理して項目をカウントするテスト関数を追加しました。リストを動的に作成し、createCollection関数を使用してソースから作成されたArrayCollectionを割り当て、反映されたファインを追加、削除すると、すべてに必要な同じソースアイテムがあり、動的に作成されたリストを削除すると、しばらくすると、追跡リストの数が自動的に減少します。
変更時にpropertyChangeイベントをディスパッチするソースにオブジェクトを配置すると、すべてのリストにも変更が表示されます。