2010-07-21 13 views
37

Ich habe eine Textbox, die über einen Code mit einem Nullable Int verbunden ist. Wenn ich die Daten aus dem Textfeld lösche, bekomme ich einen Validierungsfehler (roter Rand).WPF DataBinding: Nullable Int erhält immer noch einen Überprüfungsfehler?

Hier ist meine Bindung Code:

ZipBinding = new Binding("Zip"); 
ZipBinding.Source = Address; 
zipTextBox.SetBinding(TextBox.TextProperty, ZipBinding); 

public Int32? Zip { get { ... } set { ... } } 

Es wird als Nullable deutlich gekennzeichnet ist so warum WPF wollen geben Sie mir eine Validierungsproblem, wenn ich deaktivieren Sie das Textfeld?

Antwort

70

Die Validierung schlägt fehl, da die leere Zeichenfolge nicht in eine nullbare Ganzzahl konvertiert werden kann. Setzen Sie TargetNullValue auf string.empty auf der Bindung und es wird die leere Zeichenfolge in null konvertieren, die gültig sein wird.

+0

einfach, eine Zeile. fertig :) –

+18

Funktioniert super! Diese Antwort finden Sie unter XAML http://StackOverflow.com/a/1895482/83111 – Oskar

+0

Setzen Sie es nicht auf String.Empty, weil dann der Text "String.Empty" im Feld für null angezeigt wird Werte im Modell. Verwenden Sie stattdessen einen leeren String. Beispiel: '' – Beauty

0

Eine leere TextBox! = Null.

Möglicherweise müssen Sie die ValidationRule anpassen, um leere Strings als Einträge aufzunehmen. Oder Sie könnten einen Konverter erstellen, um leere Zeichenfolgen zu übernehmen und sie in null zu konvertieren.

+0

Also scheitert es, weil es versucht String.Empty in ein Int32 zu analysieren? ... Wenn das der Fall ist, dann denke ich, dass ich einen StringEmpty to Null Converter erstellen muss. –