У меня есть два dataProvider для одного DropDownList. Следующий код может быть скомпилирован и запущен.Flex Spark DropDownList selectedItem не обновлялся после изменения dataProvider
<?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"
creationComplete="flipLast()"
minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
public function flipLast():void {
if(last) {
list.dataProvider = dp1;
list.selectedItem = "Flex";
} else {
list.dataProvider = dp2;
list.selectedItem = "Catalyst";
}
last = !last;
}
public var last:Boolean = true;
public var dp1:ArrayCollection = new ArrayCollection([ "Flex", "Air" ]);
public var dp2:ArrayCollection = new ArrayCollection([ "Catalyst", "FlashBuilder" ]);
]]>
</fx:Script>
<s:VGroup>
<s:DropDownList id="list" requireSelection="true" />
<s:Label id="listSelectedItem" text="{list.selectedItem}" />
<s:Label id="listSelectedIndex" text="{list.selectedIndex}" />
<s:Button label="Flip" click="flipLast()" />
</s:VGroup>
</s:Application>
Сценарий 1: dataProvider обновлен, но selectedIndex - это то же самое. При запуске: [listSelectedItem = Flex, listSelectedIndex = 1]. Нажмите Flip: dataProvider обновлен, но все еще [listSelectedItem = Flex, listSelectedIndex = 1].
Сценарий 2: обновлен dataProvider, selectedIndex также обновлен. При запуске: [listSelectedItem = Flex, listSelectedIndex = 1]. Выберите «Воздух» из списка: [listSelectedItem = Air, listSelectedIndex = 2]. Нажмите «Отразить»: обновлен dataProvider, но все еще [listSelectedItem = Catalyst, listSelectedIndex = 1].
Кажется, что selectedItem управляется selectIndex. selectedItem обновляется только после того, как selectedIndex обновляется. Не следует ли обновлять данные при обновлении dataProvider? Является ли привязка к selectedItem ошибочной?
, что сломано, кажется, быть связующим звеном между Ярлык и список.selectedItem. Попробуйте это в своем коде, вы увидите, что selectedItem правильно установлен ' ' –