Мое решение:
Я создал новый класс, производный от 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);
}
}
Также добавлена тестовая функция, которая перебирает словарь и подсчитывает элементы.
Если я динамически создаю списки и назначаю ArrayCollection, созданную из источника, с помощью функции createCollection, добавляя, удаляя отраженный штраф, все имеет те же исходные элементы, которые мне нужны, и после удаления динамически создаваемых списков через некоторое время количество отслеживаемых списков автоматически уменьшается.
Если вы помещаете объекты в источник, который отправляет событие propertyChange, при любом изменении, все списки также показывают это изменение.