Pregunta

Tengo dos cuadros combinados en una SL de la página.Cuando Combo 1 actualizaciones, un servicio que se llama y rellena Combo 2.

En la primera llamada, 3 se devuelven los resultados.Cuando el cuadro combinado se expande, usted puede ver todos 3 opciones.

En la segunda convocatoria, de 4 resultados que se devuelven.Cuando el cuadro combinado se expande, se puede ver 3 opciones, con una barra de desplazamiento vertical.

Si puedo volver a cargar y hacer los pasos a la inversa, tengo 4 filas de la primera llamada y 3 filas + una fila en blanco en la segunda convocatoria.(No, el blanco no es un registro.No se puede seleccionar.)

Parece que la lista desplegable de tamaño mantiene la primera generado altura.

¿Cómo puedo actualizar el cuadro combinado max de los elementos que aparecen después de cada llamada de servicio?

Gracias!

Edición #1

El código sigue la M-V-VM patrón.Cuando se carga la página, el Group1 rellena el primer cuadro combinado, y no hay nada seleccionado.Cuando el usuario hace una selección, que la selección está obligado a Group1Selection.

<ComboBox ItemsSource="{Binding Path=Group1}" SelectedItem="{Binding Path=Group1Selection}" />
<ComboBox ItemsSource="{Binding Path=Group2}" SelectedItem="{Binding Path=Group2Selection}" />

En el viewmodel, en el descriptor de acceso set de la Group1Selection propiedad, tengo algo así como

set
{
    if (group1Selection != value)
    {
        group1Selection = value;
        PopulateGroup2();
        OnPropertyChanged("Group1Selection");
    }
}

Donde PopulateGroup2 realiza mi servicio de llamada asincrónica, obtiene los datos, y pone los datos en la parte expuesta de la propiedad de Group2.

Bajo condiciones "normales", esto no es un problema, ya que la mayoría de las opciones tienen docenas de posibles selecciones.Sin embargo, un par de Group1 elecciones solo tienen 3 o 4 niño opciones.Si uno de esos se selecciona en primer lugar, a continuación, la altura de la ComboBox, para el resto de esa instancia de la aplicación está configurado a 3 o 4, respectivamente, en lugar de aprovechar al máximo a las 8 muestra los elementos.

Tras la M-V-VM patrón, no hay ningún código en el código subyacente.

¿Fue útil?

Solución

Esto es un error conocido en el ComboBox en Silverlight 2. Creo que ha corregido en 3 SL.

Puedes solucionar este problema haciendo lo siguiente:

  1. Heredar de la ComboBox

    MyComboBox clase pública: ComboBox

  2. Obtener una referencia a la parte de "emergente" de la ComboBox dentro del método OnApplyTemplate ()

        Popup thePopup = GetTemplateChild("Popup") as Popup;
        FrameworkElement thePopupContent = thePopup.Child as FrameworkElement;
    
  3. Reemplazar el método OnItemsChanged

  4. En el interior del método anulado OnItemsChagned restablecer las propiedades de dependencia de altura y anchura en la ventana emergente usando el método ClearValue (DP).

            thePopupContent.ClearValue(FrameworkElement.WidthProperty);
            thePopupContent.ClearValue(FrameworkElement.HeightProperty);
    

Puede borrar el alto y ancho propiedades Max y Min si usted está preocupado acerca de los mismos.

Otros consejos

Que era la solución perfecta.Gracias markti.

Para aquellos interesados, la clase tendría este aspecto:

using System.Windows.Controls.Primitives; 

public class WorkAroundComboBox: ComboBox
{
    FrameworkElement thePopupContent;

    public override void OnApplyTemplate()
    {
        Popup thePopup = GetTemplateChild("Popup") as Popup;
        thePopupContent = thePopup.Child as FrameworkElement;
        base.OnApplyTemplate();
    }

    protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        thePopupContent.ClearValue(FrameworkElement.WidthProperty);
        thePopupContent.ClearValue(FrameworkElement.HeightProperty);
        base.OnItemsChanged(e);
    }
}

}

Creo que el problema es que Silverlight no se da cuenta plenamente de que los datos detrás de ComboBox 2 ha cambiado. Tal vez trate de añadir OnPropertyChanged("Group2") al conjunto de Group1 -. Que debería ayudar a Silverlight para darse cuenta de que necesita actualizar los enlaces de ComboBox 2

También podría ayudar a llamar OnPropertyChanged para Group2Selection, ya que el valor anterior ya no es válida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top