2010-07-21 18 views
37

Tengo un cuadro de texto de datos enlazados a un código int nullable a través. Si borro los datos del cuadro de texto me da un error de validación (borde rojo alrededor).WPF DataBinding: ¿Nullable Int todavía obtiene un error de validación?

Aquí está mi código de enlace:

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

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

Está claramente marcado como anulable así que ¿por qué WPF me quieren dar un problema de validación cuando se borro el cuadro de texto?

Respuesta

70

La validación está fallando porque no puede convertir la cadena vacía en un entero que puede contener nulos. Establezca TargetNullValue en string.empty en el enlace y convertirá la cadena vacía en nulo, lo que será válido.

+0

simple, una línea. hecho :) –

+18

¡Funciona genial! Consulte esta respuesta para saber cómo hacerlo en XAML http://stackoverflow.com/a/1895482/83111 – Oskar

+0

No lo configure en String.Empty, porque entonces verá el texto "String.Empty" en el campo para null valores en el modelo. Use una cadena vacía en su lugar. Ejemplo: '' – Beauty

0

Un vacío TextBox! = Null.

Puede que tenga que ajustar la ValidationRule para acomodar cadenas vacías como entradas. O bien, puede crear un convertidor para tomar cadenas vacías y convertirlas a nulas.

+0

¿Está fallando porque está tratando de analizar String.Empty en un Int32? ... Si ese es el caso, entonces sí, creo que tendré que crear un convertidor StringEmpty to Null. –

Cuestiones relacionadas