That does not work that way. When defining a variable, it is basically just present in that scope. You could declare it [Bindable] in the scope of a class, so the class would propagate changes with a PropertyChangeEvent of type PropertyChangeEvent.PROPERTY_CHANGE. This would allow you using BindingUtils, ChangeWatcher and MXML databinding with <{} /> declarative bindings.
You need to define a class, declare the class or a field [Bindable] and then create instances of the class and reference these through the ArrayCollection. Using vanilla object won't get you somewhere, since those can't dispatch Events.
package
{
[Bindable]
public class Person
{
public var name:String;
public function Person(n:String)
{
name = n;
}
}
}
const source:Array = [new Person('Fred')]
, collection:IList = new ArrayCollection(source);
Data binding relies on some key mechanisms like event dispatching, that is something to keep in mind. Also, in one way or the other, a reference to the data being changed need to in the different scopes, where the notification of the change is needed.