Frage

Ich habe zwei Combo-Boxen auf einer SL-Seite. Wenn Combo 1-Updates wird ein Dienst namens und auffüllt Combo 2.

Beim ersten Aufruf werden 3 Treffer. Wenn das Kombinationsfeld erweitert wird, können Sie alle drei Optionen.

Auf dem zweiten Aufruf werden 4 Treffer. Wenn das Kombinationsfeld erweitert wird, können Sie drei Optionen sehen, mit einer vertikalen Bildlaufleiste.

Wenn ich neu zu laden und zu tun, diese Schritte in umgekehrter Richtung, bekomme ich 4 Reihen der erste Anruf und 3 Reihen + eine leere Zeile auf den zweiten Anruf. (Nein, der leer ist kein Rekord. Es kann nicht gewählt werden.)

Es scheint, dass die Dropdown-Liste Größe hält die erste erzeugte Höhe.

Wie kann ich den Combo-Box max Artikel aktualisiere nach jedem Service-Aufruf angezeigt?

Danke!

Bearbeiten # 1

Der Code folgt das M-V-VM-Muster. Wenn die Seite geladen wird, füllt die Group1 das erste Kombinationsfeld, und nichts ausgewählt ist. Wenn der Benutzer eine Auswahl trifft, wird diese Auswahl an Group1Selection gebunden ist.

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

Im Ansichtsmodell, in dem Set-Accessor der Group1Selection Eigenschaft, ich habe so etwas wie

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

Wo PopulateGroup2 führt meine Service-Aufruf async, erhält die Daten und legt diese Daten in die exponierte Eigenschaft Group2.

Unter „normalen“ Bedingungen, ist dies kein Problem, da die meisten Optionen Dutzende von Auswahlmöglichkeiten haben. ein paar der Group1 Entscheidungen haben jedoch nur 3 oder 4 Kind Entscheidungen. Wenn einer von denen zuerst ausgewählt wird, dann ist die Höhe des ComboBox-, für den Rest dieser Anwendungsinstanz wird auf 3 oder 4, jeweils anstelle von maxing in 8 gezeigten Elementen aus.

Im Anschluss an dem M-V-VM-Muster, gibt es keinen Code im Code-behind.

War es hilfreich?

Lösung

Dies ist ein bekannter Fehler in der ComboBox in Silverlight 2. Ich denke, die in SL 3 fest.

Sie können dieses Problem beheben, indem Sie folgendermaßen vorgehen:

  1. Vererben von der ComboBox

    public class MeineComboBox: ComboBox

  2. Erhalten Sie einen Verweis auf den "Popup" Teil der ComboBox innerhalb der OnApplyTemplate () Methode

        Popup thePopup = GetTemplateChild("Popup") as Popup;
        FrameworkElement thePopupContent = thePopup.Child as FrameworkElement;
    
  3. Überschreiben Sie die Methode OnItemsChanged Wird

  4. Im Innern der überschrieben OnItemsChagned Methode setzen Sie die Höhe und Breite Abhängigkeitseigenschaften auf dem Popup die Clearvalue (DP) Methode verwendet wird.

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

Sie können die Max und Min Höhe und Breite Eigenschaften löschen, wenn Sie zu viele Sorgen sind solche über.

Andere Tipps

Das war eine perfekte Lösung. Danke markti.

Für Interessenten der Klasse würde wie folgt aussehen:

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);
    }
}

}

Ich denke, das Problem ist, dass Silverlight nicht erkennen, voll, dass die Daten hinter ComboBox 2 geändert haben. Vielleicht OnPropertyChanged("Group2") dem Satz für Group1 versuchen Sie, -., Die Silverlight soll helfen, erkennen, dass es die Bindungen für ComboBox 2 aktualisieren muss

Es könnte auch helfen OnPropertyChanged für Group2Selection zu nennen, da der vorherige Wert ist nicht mehr gültig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top