Мы делаем это, следуя этой схеме:
- Создайте метод для вычисления значения в родительском классе и сделайте его привязанным к событию.
- В родительском объекте добавьте прослушиватель событий, когда изменяется дочерняя коллекция. Для этого дочерняя коллекция должна быть ArrayCollection или аналогичной.
- При перехвате события изменения вызывать (или условно повышать) событие, прикрепленное к метаданным Bindable для метода, упомянутого в шаге 1.
Это должно привести к тому, что любой пользовательский интерфейс, который наблюдает за агрегатным свойством родителя, будет обновляться при каждом обновлении дочернего элемента.
Вот пример:
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;
}
}