Binding ComboBox.SelectedItem in Silverlight (mehr)

8

Bezogen auf meine vorherige Frage: Binding ComboBox.SelectedItem in Silverlight

Ich habe eine ComboBox wie folgt gebunden:

%Vor%

Sowohl die CurrentVideo-Eigenschaft als auch die CurrentCommentary-Eigenschaft ändern sich regelmäßig. Nach ein paar Mal bekomme ich diesen Fehler:

%Vor%

Das scheint mir ein ComboBox-Bug zu sein. Ich kann überprüfen, dass CurrentVideo vor CurrentCommentary geändert wird, daher sollte das ausgewählte Element immer ein Element sein, das sich in der Liste befindet.

Related, ich möchte wirklich nicht den Modus = TwoWay, denn wenn die ItemsSource geändert wird, ist das SelectedItem vorübergehend Null, was in meinem Modell zurückgesetzt wird, was ich eigentlich nicht möchte. Aber die Bindung funktioniert überhaupt nicht (was wie ein anderer Fehler aussieht).

    
Josh Santangelo 14.05.2009, 16:20
quelle

4 Antworten

13

Dies ist ein Fehler im ComboBox-Steuerelement, der mit dem sich ändernden Zeiger der ItemsSource-Bindung zu tun hat. Die Lösung, die ich gefunden habe, ist:

1) Binden Sie die ItemsSource immer an eine beobachtbare Sammlung und setzen Sie den Zeiger des OC niemals zurück.

%Vor%

Schlecht:

%Vor%

Gut:

%Vor%

2) Setzen Sie MyItem = null, bevor Sie MyList löschen

In Ihrem Fall ändern Sie die Referenz der Liste, wenn Sie CurrentView ändern. Daher, wenn SelectedItem nicht null ist, gibt es einen kurzen Moment in dem die ItemsSource zurückgesetzt wird, die Interna der ComboBox versuchen das SelectedItem Objekt in der neuen ItemsSource zu finden, aber das alte Objekt ist nicht da.

    
markti 21.05.2009 18:28
quelle
1

Danke für die obigen Vorschläge. In meiner Situation kann ich die "nukleare Option" wählen, dh - wenn das ausgewählte Element geändert werden muss, zerstöre ich die ComboBox vollständig, mache eine neue und setze ihr SelectedItem entsprechend.

Lächerlich, aber es funktioniert.

    
Josh Santangelo 14.05.2009 23:05
quelle
0

Combobox ist ein ziemlich buggy SL-Steuerelement: - (.

In meinem Fall habe ich aufgegeben mit dem ausgewählten Element declarativa Bindung und verwenden Sie die böse Codierung Ansatz ... hässlich, aber funktioniert:

Ссылка

HTH   Braulio

    
Braulio 14.05.2009 21:48
quelle
0

Ich habe das gleiche Problem vor einer Weile bekommen und von dem, was ich sagen kann, ist es ein Fehler in ComboBox, wenn die ItemSource geändert wird, hat es ein Problem mit dem Layout und scrollt schlecht.

Es gibt ein Problem, indem Sie ComboBox.UpdateLayout zwischen dem Festlegen der ItemSource und SelectedItem aufrufen.

Ich habe vor einer Weile bei über das Problem gebloggt ComboBox in Silverlight .

Ich muss noch überprüfen, ob das Problem in der Silverlight 3 Beta noch existiert

    
Nigel Sampson 14.05.2009 21:49
quelle