2009-01-07 10 views
5

Ich habe eine ComboBox eingerichtet wie folgt, wobei KVPList ist eine IList (von KeyValuePair wenn es darauf ankommt):Binden eines ComboBox in eine IList und unter Verwendung SelectedValue

comboBox.DisplayMember = "Value"; 
comboBox.ValueMember = "Key"; 
comboBox.DataSource = KVPList; 

I haben dann eine Bindung mit SelectedValue einzurichten an eine BindingSource (an eine DataSet) binden. Aus irgendeinem Grund wird das Kombinationsfeld immer leer angezeigt, wenn das Formular angezeigt wird. Es ist jedoch richtig ausgefüllt (die Werte der IList zeigen gut und können ausgewählt werden).

Nun habe ich mein Bestes versucht, um durch zu verfolgen, und es scheint zunächst SelectedValue korrekt zu setzen, wenn gebunden, aber dann irgendwo auf dem Weg wird es auf null zurückgesetzt. Ich habe mit der Reihenfolge gespielt, in der die Dinge aufgerufen werden, ohne Erfolg.

Kann jemand etwas Licht darauf werfen oder einen Workaround vorschlagen?

Für die Aufzeichnung, auf dem gleichen Formular, habe ich eine andere ComboBox auf dem gleichen Formular, mit seiner SelectedValue an die gleiche BindingSource gebunden. Das DataSource ist ein DataSet, kein IList und es funktioniert wie ein Charme. Es könnte eine Option sein, aus der IList eine DataTable zu machen, aber es scheint wie eine ganze Menge zusätzlicher Overhead; Ich erstelle die IList von einer Aufzählung.

Antwort

7

Autsch. Nachdem im Grunde ein halber Tag für diesen einen verschwendet wurde, habe ich es herausgefunden. Es war ein völliger Fehler von mir.

Die KVPList wurde ein IList von KeyValuePair<short,string> gesetzt, aber die Felddaten sind vom Typ int. Im Wesentlichen würde die Datenbindung ausgelöst und die Eigenschaft SelectedValue gesetzt. Dann würden die Bindungen DisplayMember und ValueMember feuern und die SelectedValue wieder überprüfen. Da die ValueMember vom Typ short, nicht int ist, würde sie keine Übereinstimmung finden und sie daher auf null setzen.

Etwas komisches muss passieren mit Boxen und Unboxing, aber ich bin zu müde, um zu verstehen, warum gerade jetzt.

Ich lasse diese Frage für den Fall, dass jemand anderes in das gleiche Problem läuft. Es ist schwer aufzuspüren, weil ich erwarte, dass es entweder versucht, eine Ausnahme auszulösen oder zu werfen, und nicht stillschweigend null wird. Immerhin sind short und int beide Werttypen und zuletzt überprüft ich (int)10 == (short)10 gilt.

+0

Danke für Ihre Antwort. Ich stieß auf das gleiche Problem. Mein Abhängigkeitseigenschaftstyp war IList , der an einen ILIst gebunden war. (Foo implementiert IFoo). Alles schien zu funktionieren, außer der Wert der Abhängigkeitseigenschaft war immer null. Keine Ausnahmen oder Debug-Ausgabe. Als ich den Abhängigkeitseigenschaftentyp in IList änderte, fing alles an zu arbeiten. –