¿Cómo hacer que el ancho de Flex 3 ComboBox se ajuste en función de los datos vinculados que el contenido del proveedor ha cambiado?

StackOverflow https://stackoverflow.com/questions/1428597

Pregunta

En Flex 3, he creado un ComboBox dentro de un componente MXML similar al siguiente:

<mx:ComboBox id="comboBox" dataProvider="{_choices}" />

<mx:Script>
<![CDATA[
  import mx.collections.ArrayCollection;
  // etc...
  public function get choices():ArrayCollection { return _choices; }

  [Bindable]
  private var _choices:ArrayCollection =
    new ArrayCollection( [ { data: "ALL", label: "All" } ] );
  // etc...
]]>
</mx:Script>

</mx:HBox>

En la aplicación MXML principal, estoy modificando el contenido de la propiedad de opciones:

myComponentId.choices.removeAll();
myComponentId.choices.addItem({data: "NY", label: "New York"});
myComponentId.choices.addItem({data: "CA", label: "California"});
// etc...

El enlace está funcionando porque el ComboBox recoge automáticamente los nuevos contenidos agregados en tiempo de ejecución, sin embargo no está ajustando su ancho. El ancho inicial de ComboBox es lo suficientemente ancho solo para mostrar el elemento inicial " All " declarado en el componente. Sin embargo, quiero y hubiera esperado que el ComboBox cambiara de tamaño automáticamente durante la encuadernación para poder mostrar "California", pero no lo es.

¿Cómo puedo hacer que el ComboBox actualice su ancho después de haber agregado nuevas etiquetas más anchas a su proveedor de datos? ¡Gracias!

¿Fue útil?

Solución

Probablemente solo necesite llamar a invalidateProperties () , invalidateDisplayList () , invalidateSize () , o alguna combinación de los tres (I soy algo así como un novato flexible), para forzar una actualización de las mediciones del componente después de cambiar el proveedor de datos o su contenido.

myComponentId.invalidateSize();
myComponentId.invalidateDisplayList();
myComponentId.invalidateProperties();

Otros consejos

Agregaría un setter para elecciones y llamaría a validateNow () en el ComboBox al final del setter:

public function set choices(value:ArrayCollection):void
{
    _choices = value;

    comboBox.validateNow();
}

Encontré el mismo problema y ninguno de estos funcionó para mí. Logré resolver esto creando un nuevo controlador de eventos

menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);

El método llamado en este evento simplemente cambia el tamaño de la propiedad dropdown.width.

private function updateListWidth(event:ResizeEvent):void {
        menuComboBox.dropdown.width = menuComboBox.width;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top