Невозможно привязать selectedIndex элемента DropDownList к элементу selectedIndex класса Bindable - PullRequest
1 голос
/ 08 февраля 2012

Мне не удается привязать открытое свойство selectedIndex искры DropDownList к его исходному источнику в модели представления представления.

В целях тиражирования этой проблемы с как можно меньшим количеством строк у меня есть два представления и одна модель представления. Код следует.

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 Ответ

4 голосов
/ 08 февраля 2012

Отладка приложения Я обнаружил, что 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}" />

Более подробная информация об этом содержится в документах , которые также включаютFlex 4 "альтернатива, которая заключается в использовании тега привязки:

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