2010-07-21 14 views
37

Mam pole danych pola tekstowego do wartości n do przesłania przez kod. Jeśli usuwam dane z pola tekstowego, pojawia się błąd sprawdzania poprawności (czerwona ramka wokół niego).WPF DataBinding: Nullable Int nadal otrzymuje błąd sprawdzania poprawności?

Tu jest mój kod oprawa:

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

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

To wyraźnie oznaczone jako Nullable więc dlaczego WPF chce dać mi problem walidacji kiedy wyczyścić pole tekstowe?

Odpowiedz

70

Sprawdzanie poprawności kończy się niepowodzeniem, ponieważ nie może przekonwertować pustego ciągu na zerowalną liczbę całkowitą. Ustaw TargetNullValue na string.empty w Binding i przekonwertuje pusty łańcuch na wartość null, która będzie poprawna.

+0

prosta, jedna linia. zrobione :) –

+18

Działa świetnie! Zobacz tę odpowiedź, aby dowiedzieć się, jak to zrobić w XAML http://stackoverflow.com/a/1895482/83111 – Oskar

+0

Nie ustawiaj tego na String.Empty, ponieważ wtedy zobaczysz tekst "String.Empty" w polu dla null wartości w modelu. Zamiast tego użyj pustego ciągu. Przykład: '' – Beauty

0

Pusty TextBox! = Null.

Być może trzeba będzie poprawić poprawność ValidationRule, aby uwzględnić puste ciągi jako wpisy. Można też utworzyć konwerter, który pobiera puste ciągi i konwertuje je na wartość null.

+0

A więc nie działa, ponieważ próbuje sparsować String.Empty w Int32? ... Jeśli tak jest, to tak, myślę, że będę musiał stworzyć konwerter StringEmpty to Null. –

Powiązane problemy