2009-04-29 2 views

risposta

16

Sì, la proprietà SelectedItem di ComboBox è associabile.

sarebbe andare qualcosa come questo:

<mx:ComboBox selectedItem="{mySelectedItem}"> 
</mx:ComboBox> 

Nel vostro AS:

[Bindable] 
var mySelectedItem:Object; 

Modifiche a mySelectedItem dovrebbe presentarsi in ComboBox. È possibile che si verifichino errori se l'elemento a cui fa riferimento mySelectedItem non esiste nel DataProvider di ComboBox.

2

Utilizzare un listener di eventi per l'evento Change ed elaborarlo lì.

// update a label item's text with that of the Combobox's selectedItem 
private function changeEvt(event:Event):void { 
    label.text =event.currentTarget.selectedItem.label + " " + 
} 
9

In superficie, è il più semplice:

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{defaultItem}"/> 

Quando si imposta defaultItem (assicurarsi che sia [Bindable]) per una delle voci nel fornitore di dati, si aggiornerà il controllo.

Ma ci sono problemi con questo approccio. A meno che currentDefaultItem non cambi sempre AFTER myDataProvider, il binding a dataProvider può annullare la selezione, ripristinando il valore predefinito (primo elemento nell'elenco).

Un modo per aggirare questo è forzare selectedItem ad essere in estensione dopo dataProvider, includendo dataProvider nella chiamata che fornisce l'oggetto selezionato.

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/> 

Quello che fa è garantire selectedItem sarà rimbalzo quando entrambi i cambiamenti currentDefaultItem, o dopo le modifiche dataProvider. Sarei interessato anche ad altre soluzioni.

1

So che questo è come descritto nella documentazione. Come in una modifica all'Item selezionato, il listener delle modifiche verrà attivato. Comunque per me, questo non succede. Qualcun'altro incontra lo stesso comportamento?

+0

Ho notato con selectedIndex. – Panzercrisis

1

o, si potrebbe fare qualcosa di simile, se non ti dispiace ComboBox si estende; Questo è pseudocodice (mi dispiace, l'identificazione delle partite dipende dal tipo di oggetto) - ma si ottiene l'idea ...

public class IndexRetainingComboBox extends ComboBox 
{ 
    public function IndexRetainingComboBox() 
    { 
     super(); 
    } 

    override public function set dataProvider(value:Object):void 
    { 
     var originalSelection:Object = this.selectedItem; 
     super.dataProvider = value; 
     var newIdx:uint = [find originalSelection idx in combobox or return 0 ] 
     this.selectedIndex = newIdx; 
    } 
}