Flex Spark DropdownList SelectedItemは、DataProviderが変更された後に更新されませんでした
-
13-10-2019 - |
質問
1つのドロップダウンリスト用の2つの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、listelectedIndex = 1]。 [Flip]をクリックします:DataProviderが更新されますが、[ListSelectedItem = Flex、ListSelectedIndex = 1]。
シナリオ2:DataProviderが更新され、SelectedIndexも更新されます。起動時:[listSelectedItem = flex、listelectedIndex = 1]。リストからAirを選択します:[listelectedItem = air、listelectedindex = 2]。 [Flip]をクリックします:DataProviderが更新されますが、[ListElectedItem = Catalyst、ListElectedIndex = 1]。
SelectedItemはSelectedIndexによって駆動されるように思えます。 SelectedItemの更新は、selectedindexの更新の場合にのみ更新されます。 DataProviderが更新された場合、SelectedItemを更新する必要はありませんか? SelectedItemへのバインディングには欠陥がありますか?
解決
おそらく、あなたはそれが壊れていると仮定するのに正しいです。私はそれを判断しません。問題の修正は非常に簡単ですが、フリップ関数を変更して選択したインデックスをリセットし、リストのデータ変更をトリガーし、最終的にコンポーネントをバインドします。
public function flipLast():void {
list.selectedIndex = -1;
if( last ) {
list.dataProvider = dp1;
list.selectedItem = "Flex";
} else {
list.dataProvider = dp2;
list.selectedItem = "Catalyst";
}
last = !last;
}