数据绑定是将一个对象中的数据同另一个对象中的数据联系在一起的过程。数据绑定为在应用的不同层之间传递数据提供了便捷方法。数据绑定需要一个源属性,一个目的属性,以及用于表明何时将数据从源属性拷贝到目的属性的触发事件。当源属性变化时,对象发出触发事件。 

     Adobe Flex提供三种方法用于指定数据绑定:MXML中的大括号({})语法,MXML中的<mx:Binding>标记,以及ActionScript中的 BindingUtils 的系列方法。

   1   下面的例子使用大括号({})语法来展示一个Text控件,该控件的数据来自于TextInput控件Text属性:

 
  
  1. <?xml version="1.0"?>    
  2.  
  3. <!-- binding/BasicBinding.mxml -->    
  4.  
  5. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">    
  6.  
  7.     <mx:TextInput id="myTI" text="Enter text here"/>    
  8.  
  9.     <mx:Text id="myText" text="{myTI.text}"/>    
  10.  
  11. </mx:Application>   

     大括号中所括的属性名就是绑定表达式中的源属性。当源属性的值放生变化时,Flex把源属性myTI.text的当前值拷贝到目的属性。

     2    用<mx:Binding>标记作为大括号语法的替代方法。在使用<mx:Binding>时,要为<mx:Binding>标记提供一个源属性作为标记的source属性以及提供一个目的属性作为标记的destination属性。

   下面的例子使用<mx:Binding>标记定义了一个从TextInput控件到Text控件的数据绑定: 

 
  
  1. <?xml version="1.0"?>    
  2.  
  3. <!-- binding/BasicBindingMXML.mxml -->    
  4.  
  5. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">    
  6.  
  7.     <mx:TextInput id="myTI"/>    
  8.  
  9.     <mx:Text id="myText"/>       
  10.  
  11.     <mx:Binding source="myTI.text" destination="myText.text"/>    
  12.  
  13. </mx:Application>    

同大括号语法相比,用<mx:Binding>标记能够将视图(用户界面)同模型完全分离。<mx:Binding>标记也能实现将多个源属性绑定到一个相同的 目的属性,这是因为能够定义多个具有相同的destination属性的<mx:Binding>标记。例子请参照“绑定多个源属性到一个目的属性”。 

   3   大括号语法和<mx:Binding>标记都能在编译期定义数据绑定,而使用 ActionScript代码则可以在运行期定义数据绑定,如下例所示: 

 
  
  1. <?xml version="1.0"?>    
  2.  
  3. <!-- binding/BasicBindingAS.mxml -->    
  4.  
  5. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">    
  6.  
  7.         
  8.  
  9.     <mx:Script>    
  10.  
  11.       <![CDATA[    
  12.  
  13.         import mx.binding.utils.*;    
  14.  
  15.  // Define data binding.    
  16.  
  17.         public function initBindingHandler():void {    
  18.  
  19.             BindingUtils.bindProperty(myText, "text", myTI, "text");    
  20.  
  21.         }    
  22.  
  23.       ]]>    
  24.  </mx:Script>    
  25. <mx:TextInput id="myTI"/>    
  26. <mx:Text id="myText" preinitialize="initBindingHandler();"/>    
  27.  
  28. </mx:Application>