Apache flex 不了解Flex中动态数据绑定(BindProperty)的基础知识

Apache flex 不了解Flex中动态数据绑定(BindProperty)的基础知识,apache-flex,actionscript-3,actionscript,air,Apache Flex,Actionscript 3,Actionscript,Air,我需要动态绑定运行时创建的组件的属性。在这种特殊情况下,请假设我需要使用bindProperty 我不太明白为什么下面的简单测试失败了(参见代码)。单击按钮时,标签文本不会更改 我意识到使用传统的非动态绑定有更简单的方法来处理这个特定的示例,但是我需要从使用bindProperty的角度来理解它 有人能帮我理解我错过了什么吗 <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http

我需要动态绑定运行时创建的组件的属性。在这种特殊情况下,请假设我需要使用bindProperty

我不太明白为什么下面的简单测试失败了(参见代码)。单击按钮时,标签文本不会更改

我意识到使用传统的非动态绑定有更简单的方法来处理这个特定的示例,但是我需要从使用bindProperty的角度来理解它

有人能帮我理解我错过了什么吗

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();">
  <mx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.binding.utils.*;
      public var Available:ArrayCollection=new ArrayCollection();

      public function get Value():String {
        return (Available.getItemAt(0).toString());
      }

      public function Init():void {
        Available.addItemAt('Before', 0);
        BindingUtils.bindProperty(Lab, 'text', this, 'Value');
      }

      public function Test():void {
        Available.setItemAt('After', 0);
      }
    ]]>
  </mx:Script>
  <mx:Label x="142" y="51" id="Lab"/>
  <mx:Button x="142" y="157" label="Button" click="Test();"/>
</mx:WindowedApplication>


提前感谢。

我从来没有使用BindingUtils,但我的第一个猜测是您缺少了“Value”上的[Bindable]标记

如Glenn所述,您需要在
值上添加
[Bindable]
标记

此外,您还没有为属性定义setter。只有在调用相应的setter时才会调用数据绑定。流程类似于:调用setter-Flex通过调用getter更新数据

  [Bindable]
  public function get value():String {
    return (Available.getItemAt(0).toString());
  }

  public function set value(v:String):void {
    Available.setItemAt(v, 0);
  }

  public function init():void {
    Available.addItemAt('Before', 0);
    BindingUtils.bindProperty(Lab, 'text', this, 'Value');
  }

  public function iest():void {
    value = "After";
  }


注意,我已经按照常规惯例将函数和属性的名称更改为小写。InitialCaps仅用于类名。

是的,看起来是因为我缺少一个set方法。我不知道这是必须的。