2009-04-29 13 views

Respuesta

16

Sí, la propiedad del elemento seleccionado de ComboBox es vinculable.

sería algo parecido a esto:

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

En AS:

[Bindable] 
var mySelectedItem:Object; 

Cambios en mySelectedItem debe aparecer en ComboBox. Puede obtener errores si el elemento al que mySelectedItem hace referencia no existe en el proveedor de datos de ComboBox.

2

Utilice un detector de eventos para el evento Change y procese allí.

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

En la superficie, es tan simple como:

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

Al configurar defaultItem (asegúrese de que es [Bindable]) a uno de los elementos del proveedor de datos, se actualizará el control.

Pero hay problemas con este enfoque. A menos que currentDefaultItem siempre cambie DESPUÉS de myDataProvider, el enlace a dataProvider puede deshacer la selección, volviendo al valor predeterminado (primer elemento en la lista).

Una forma de evitar esto es forzar a selectedItem a recuperarse después de dataProvider, incluyendo dataProvider en la llamada que proporciona el elemento seleccionado.

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

Lo que esto hace es asegurar selectedItem será de rebote cuando sea currentDefaultItem cambios, o después de los cambios dataProvider. Me interesarían otras soluciones yo mismo.

1

Sé que así es como se describe en la documentación. Como en un cambio en el elemento seleccionado, se activará el detector de cambios. Sin embargo, para mí, esto no sucede. ¿Alguien más encuentra el mismo comportamiento?

+0

me he dado cuenta de que con selectedIndex. – Panzercrisis

1

o, se podría hacer algo como esto si no le importa que se extiende ComboBox; Esta es pseudocódigo (lo siento, la identificación de los partidos depende del tipo de objeto) -, pero se entiende la 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; 
    } 
} 
Cuestiones relacionadas