Свойства объекта или коллекции не будут отправлять событие изменения свойства, если оно не реализовано.
Аналогично вашему примеру, изменение элемента Array не будет связано.
Коллекции, такие какArrayCollection переносит объекты в прокси для отправки событий для привязки.
Используйте ObjectProxy
для отправки изменений в ваш объект.
Создайте экземпляр ObjectProxy и прослушайте PropertyChangeEvent:
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);
Доступ к вашему объекту через прокси, например, установка свойства с именем 'property':
objectProxy.property = "Hello, world";
В этом примере создается ObjectProxy с таймером для изменения члена 'property' каждую секунду:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955"
minHeight="600"
creationComplete="creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.events.PropertyChangeEvent;
import mx.utils.ObjectProxy;
private var object:Object = {};
private var objectProxy:ObjectProxy;
private var timer:Timer;
protected function creationCompleteHandler(event:FlexEvent):void
{
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, propertyChangeHandler);
timer = new Timer(1000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
}
protected function propertyChangeHandler(event:PropertyChangeEvent):void
{
label.text = (event.source).property;
}
protected function timerHandler(event:TimerEvent):void
{
objectProxy.property = Math.random() * 1000;
}
]]>
</fx:Script>
<s:Label id="label" />
</s:Application>