2011-01-05 11 views
5

En mi proyecto MVVM tengo dos cuadros de texto, uno de los cuales está vinculado a un campo entero nulo de mi objeto y el otro a un campo de cadena. Cuando la vista se carga, si ingreso cualquier valor al cuadro de texto vinculado a la propiedad de cadena, puedo ver que su valor se actualiza a la propiedad de cadena del objeto.Valores anulables de datos no actualizados en Silverlight XAML

Sin embargo, el problema surge cuando ingreso un valor al cuadro de texto que está vinculado al campo entero numerable de mi objeto. Si es un valor entero correcto, entonces el valor se actualiza. Si pongo una cadena alfanumérica en el cuadro de texto vinculado al campo entero numerable de mi objeto o si lo dejo en blanco, entonces el campo entero numerable de mi objeto no se actualiza. Todavía conserva todo lo que se estableció anteriormente.

Por ej. si ingresé un número '7' en el cuadro de texto numérico, se actualizará a 7. Ahora si lo cambio de '7' para decir '7a' o 'a7' o 'asd' o lo dejo en blanco. El valor sigue siendo 7, que era el valor anterior.

¿Hay alguna solución a este problema que no sea cambiar el tipo de nullable?

Gracias por su tiempo ...

Respuesta

1

problema aquí es siempre que entre empty stringalphabet values o en su TextBox que está obligado a Nullable<Int32>, no se establece el valor de la int anulable.

En este caso, el enlace falla al convertir un valor de cadena en un valor entero. Y después de fallar, no establece el valor como nulo, sino que simplemente deja el valor anterior tal como está. Puede asegurarse de que esto esté sucediendo mediante la depuración.

Lo que puede hacer para resolver esto es crear un convertidor. Este convertidor intenta convertir un valor de cadena a int y, si no lo hace, devuelve null, que se establecerá en valor de nullable int.

+0

Gracias. Ya agregué el convertidor. Pero el problema con el convertidor es que devolverá un valor nulo, borrando así el cuadro de texto. Quiero que el usuario vea que ha ingresado un valor incorrecto. Limpiar el cuadro de texto no les permitirá ese beneficio ... y tendrán que volver a escribir el número completo (como en esos 16 dígitos que ingresas a veces en los formularios) – user20358

6

si usted tenía su cuadro de texto enmascarado para aceptar sólo valores numéricos también se puede utilizar:

Text = {Binding PropertyName, Modo = TwoWay, TargetNullValue = ''}

Esto va a ajustar correctamente el int con destino ? propiedad a null cuando se detecta una cadena vacía.

Cuestiones relacionadas