Pregunta

Tengo una aplicación WPF muy simple en la que uso el enlace de datos para permitir la edición de algunos objetos CLR personalizados.Ahora quiero poner alguna validación de entrada cuando el usuario hace clic en guardar.Sin embargo, todos los libros de WPF que he leído no dedican realmente ningún espacio a este tema.Veo que puedes crear ValidationRules personalizadas, pero me pregunto si esto sería excesivo para mis necesidades.

Así que mi pregunta es esta:¿Existe alguna buena aplicación de muestra o artículo en algún lugar que demuestre las mejores prácticas para validar la entrada del usuario en WPF?

¿Fue útil?

Solución

Creo que la nueva forma preferida podría ser utilizar IDataErrorInfo

Leer más aquí

Otros consejos

De MS Documentación de patrones y prácticas:

Validación de datos e informe de errores

Su modelo o modelo de vista a menudo deberá realizar la validación de datos y indicar cualquier error de validación de datos a la vista para que el usuario pueda actuar para corregirlos.

Silverlight y WPF brindan soporte para la gestión de errores de validación de datos que ocurren al cambiar las propiedades individuales que están vinculadas a los controles en la vista.Para propiedades individuales que están unidas a los datos a un control, el modelo o modelo de vista puede indicar un error de validación de datos dentro del establecimiento de propiedades rechazando un valor incorrecto entrante y lanzando una excepción.Si la propiedad ValidatesOnExcepciones en el enlace de datos es verdadera, el motor de enlace de datos en WPF y Silverlight manejará la excepción y mostrará una señal visual al usuario que existe un error de validación de datos.

Sin embargo, debe evitarse las excepciones con propiedades de esta manera cuando sea posible.Un enfoque alternativo es implementar las interfaces IdataErrorInfo o inotifyDataErrorInfo en su modelo de vista o clases de modelo.Estas interfaces permiten que su modelo o modelo de vista realice una validación de datos para uno o más valores de propiedad y devuelva un mensaje de error a la vista para que el usuario pueda ser notificado del error.

La documentación continúa explicando cómo implementar IDataErrorInfo e INotifyDataErrorInfo.

Personalmente, estoy usando excepciones para manejar la validación.requiere los siguientes pasos:

  1. en su expresión de enlace de datos, debe agregar "ValidatesOnException=True"
  2. en su objeto de datos al que se está vinculando, debe agregar el controlador DependencyPropertyChanged donde verifica si el nuevo valor cumple con sus condiciones; de lo contrario, restaura el valor anterior del objeto (si es necesario) y lanza una excepción.
  3. en su plantilla de control que utiliza para mostrar valores no válidos en el control, puede acceder a la recopilación de errores y mostrar un mensaje de excepción.

El truco aquí es vincularse solo a objetos que se derivan de DependencyObject.La implementación simple de INotifyPropertyChanged no funcionaría: hay un error en el marco que le impide acceder a la recopilación de errores.

También verifique Este artículo.Supuestamente Microsoft lanzó su Biblioteca empresarial (v4.0) de sus patrones y prácticas donde cubren el tema de la validación, pero Dios sabe por qué no incluyeron la validación para WPF, por lo que la publicación del blog a la que les dirijo explica lo que hizo el autor para adaptarlo.¡Espero que esto ayude!

Quizás te interese el LibroBiblioteca aplicación de muestra de la Marco de aplicación WPF (WAF).Muestra cómo usar la validación en WPF y cómo controlar el botón Guardar cuando existen errores de validación.

Si su interfaz de usuario utiliza directamente su clase empresarial, es preferible utilizar IDataErrorInfo porque acerca la lógica a su propietario.

Si su clase de negocio es una clase de código auxiliar creada por una referencia a un servicio WCF/XmlWeb, entonces no puede/no debe usar IDataErrorInfo ni lanzar una excepción para usar con ExceptionValidationRule.En su lugar puedes:

  • Utilice una regla de validación personalizada.
  • Defina una clase parcial en su proyecto de interfaz de usuario de WPF e implemente IDataErrorInfo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top