2009-09-04 14 views
6

Ich möchte ein leeres Element in der ComboBox haben, damit der Benutzer "Auswahl aufheben" und halten Sie die ComboBox leer (Null-Wert).WPF: Nullable ComboBox

Wie kann ich das tun?

+0

Lesen Sie mein Blog für ein voll funktionsfähiges Beispiel für eine saubere NULL-Combobox, siehe http://www.blueedge.nl/weblog/post/Nullable-ComboBox-in-Silverlight.aspx Die Lösungen unterstützt 2-Wege-Databinding mit Nullable Artikel. –

Antwort

3

Machen Sie Ihr Leben einfacher, indem Sie einen Sentinel-Wert verwenden. Das heißt, eine Instanz Ihrer Ansichtsmodellklasse, die nichts darstellt.

+0

Es ist nicht genau das, wonach ich suche. Ich möchte, dass das ausgewählte Element 'Null' ist, keine Instanz wie jedes andere Element der Combobox. – Yannic

0

Wenn Sie sich meinen Blogeintrag here ansehen, können Sie eine verbindliche Lösung sehen, bei der Sie Ihre VM nicht "ändern" oder Dummy-Elemente in eine Sammlung einfügen müssen, die nicht wirklich zu Ihren Daten passt .

Grundsätzlich verwenden Sie in Ihrem XAML eine CompositeCollection, die Ihnen beispielsweise die Möglichkeit bietet, numerische Werte in Ihrer Combo-Box zu haben, und den Text "Bitte auswählen ...", um den Platzhalter anzugeben Dies ist nicht möglich, wenn Sie ausschließlich an numerische Felder in Ihrem Modell gebunden sind und sich darauf verlassen, diesen magischen Wert hinzuzufügen.

+2

Ich denke, ich muss Pete nicht zustimmen, und nicht nur, weil du mich einen "professionellen Entwickler" genannt hast;) Das ist einfach viel mehr Arbeit als die Verwendung einfacher Sentinels, und vieles davon verschmutzt die Sicht. Versteh mich nicht falsch, ich denke, es ist sicherlich eine gute Option. Aber ich schätze, ich bevorzuge die Einfachheit der Wächter. Da eine VM ein Modell der Ansicht ist, wenn die Ansicht etwas benötigt, um nichts darzustellen, denke ich nicht, dass es fehl am Platz ist, das in der VM manifestiert wird. Meine 2p. –

+0

Angenommen, Sie haben eine Liste von Ländern, Ihr Sentinel muss ein Land ohne Beschreibung sein? Sie verschmutzen also die Datenbank. Vielleicht verstehe ich etwas nicht. – Yannic

+1

Wenn Sie die VM zum Binden verwenden, müssen Sie die Daten nicht wirklich in die Datenbank einfügen. Sie müssen sie lediglich hinzufügen, bevor Sie den DataContext festlegen. Während ich Kents POV hier verstehe, muss ich mit ihm nicht übereinstimmen, weil dies die Sentinel so einschränkt, dass sie mit dem Datentyp der Daten kompatibel ist, an die Sie binden. Nehmen wir an (wie oben erwähnt), dass Sie eine Liste von ganzen Zahlen anzeigen möchten, aus denen der Benutzer auswählen kann. Wenn Sie jedoch "Bitte auswählen ..." anzeigen möchten, um den Benutzer zu benachrichtigen, dass eine Auswahl erforderlich ist, müssen Sie die Option ändern Ints zu Strings. –