无法将DropDownList的selectedIndex绑定到Bindable类的selectedIndex成员

时间:2012-02-08 03:43:38

标签: flex data-binding

我无法将spark DropDownList的selectedIndex公共属性绑定到视图演示模型中的原始源。

为了以尽可能少的行复制此问题,我有两个视图和一个表示模型。代码如下。

Main.mxml

<?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" 
               xmlns:views="com.blah.views.*">

    <views:DropDownListView/>

</s:Application>

DropDownListView.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">

    <fx:Script>
        <![CDATA[
            import com.blah.presentationmodels.DropDownListPresentationModel;

            [Bindable]
            private var pm:DropDownListPresentationModel = new DropDownListPresentationModel();
        ]]>
    </fx:Script>

    <s:DropDownList id="myDropDownList" 
                    dataProvider="{pm.list}" 
                    selectedIndex="{pm.selectedIndex}" 
                    valueCommit="{pm.selectionChanged()}"/>

</s:Group>

DropDownListPresentationModel.as

package com.blah.presentationmodels
{
    import mx.collections.ArrayCollection;

    [Bindable]
    public class DropDownListPresentationModel
    {
        public var selectedIndex:int = -1;
        public var list:ArrayCollection = new ArrayCollection();

        public function DropDownListPresentationModel()
        {
            list.addItem("Load of Bread");
            list.addItem("Stick of Butter");
            list.addItem("Carton of Milk");
        }

        public function selectionChanged():void
        {
            var newSelectedIndex:int = selectedIndex; // always -1
        }
    }
}

调试应用程序我发现表示模型中的selectedIndex始终保持默认值,无论我从DropDownList中选择哪个项目。对于上面的示例代码,这是-1。

如何在表示模型中绑定selectedIndex,以便在所选项DropDownList发生更改时对其进行适当更新?

1 个答案:

答案 0 :(得分:4)

  

调试应用程序我在中找到selectedIndex   演示模型始终保持默认值   无论我从DropDownList中选择哪个项目。为了   上面的示例代码是-1。

根据您提供的代码,这是正确的。您已将pm.selectedIndex绑定到myDropDownList.selectedIndex。因此,每当pm.selectedIndex发生更改时,myDropDownList.selectedIndex的值都会更改。

你没有做的是将myDropDownList.selectedIndex绑定到pm.selectedIndex。因此,对myDropDownList.selectedIndex的任何更改都将对pm.selectedIndex完全没有影响。使这种“绑定”双向工作的最简单方法是使用简写MXML语法:

<s:DropDownList id="myDropDownList" 
                selectedIndex="@{pm.selectedIndex}" />

More information on that in the docs,其中还包括使用绑定标记的“pre-Flex 4”替代方案:

<mx:Binding source="myDropDownList.selectedIndex" destination="pm.selectedIndex"/>