2010-12-26 6 views
2

Ich habe zwei DataProvider für eine DropDownList. Der folgende Code kann kompiliert und ausgeführt werden.Flex Spark DropDownList selectedItem wurde nicht aktualisiert, nachdem der DataProvider geändert wurde

<?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> 

Szenario 1: DataProvider aktualisiert, aber selectedIndex ist identisch. Beim Start: [listSelectedItem = Flex, listSelectedIndex = 1]. Klicken Sie auf Flip: dataProvider wird aktualisiert, aber immer noch [listSelectedItem = Flex, listSelectedIndex = 1].

Szenario 2: dataProvider aktualisiert, selectedIndex wird ebenfalls aktualisiert. Beim Start: [listSelectedItem = Flex, listSelectedIndex = 1]. Wählen Sie Luft aus der Liste: [listSelectedItem = Air, listSelectedIndex = 2]. Klicken Sie auf "Flip": dataProvider wird aktualisiert, aber immer noch [listSelectedItem = Catalyst, listSelectedIndex = 1].

Scheint mir, dass selectedItem von selectedIndex gesteuert wird. selectedItem wird nur aktualisiert, wenn selectedIndex aktualisiert wird. Sollte nicht datedItem aktualisiert werden, wenn DataProvider aktualisiert wird? Ist die Bindung an ausgewählte Artikel fehlerhaft?

+0

was kaputt ist scheint die Verbindung zu sein zwischen dem Label und list.selectedItem. Probieren Sie dies in Ihrem Code aus. Sie werden sehen, dass selectedItem korrekt gesetzt ist: ' –

Antwort

2

Vielleicht haben Sie recht, wenn Sie davon ausgehen, dass es kaputt ist. Ich werde darüber nicht urteilen. Das Update für Ihr Problem ist aber ziemlich einfach, die Flip-Funktion ändern ausgewählten Index zurücksetzen, wodurch Datenänderungs Triggerung auf der Liste, und schließlich auf Ihren Komponenten Bindung:

public function flipLast():void { 
      list.selectedIndex = -1; 
      if(last) { 
       list.dataProvider = dp1; 
       list.selectedItem = "Flex"; 
      } else { 
       list.dataProvider = dp2; 
       list.selectedItem = "Catalyst";   
      } 
      last = !last; 
    }