Mientras trabajaba en algunos validadores personalizados en WPF, uno de mis compañeros de trabajo me señaló el IDataErrorInfo. Tengo una vista de muestra en XAML que tiene un cuadro de texto y un botón. En función del valor en el cuadro de texto, me gustaría que el botón esté habilitado o deshabilitado. Mi compañero de trabajo sugirió que extender IDataErrorInfo en el presente o mi vista y escribir una lógica personalizada para las propiedades 'Artículo' y 'Error' resolvería mi problema. Antes de que pudiera incorporar esto en mi código, pensé que debería entender cómo funciona la información IDataError y de qué se trata la implementación de esta interfaz que proporciona los enganches necesarios para activar la lógica de validación personalizada. ¡Alguna ayuda con este concepto sería extremadamente útil!¿Qué es IDataErrorInfo y cómo funciona con WPF?
Respuesta
IDataErrorInfo es una interfaz que una clase puede implementar para notificar a los suscriptores de la información de error de una propiedad específica, así como también errores a nivel de clase.
Si implementa esto para la clase que se usa como su DataContext (es decir, el modelo de vista en MVVM), puede configurar UpdatesOnValidationError como verdadero para los controles y establecer una plantilla personalizada para mostrar el elemento de manera diferente si hay errores. WPF maneja las cañerías por usted.
Aquí hay un short tutorial showing the entire process.
que podría estar interesado en la aplicación de la muestraBookLibrary del WPF Application Framework (WAF). Muestra cómo usar la validación en WPF y cómo controlar el botón Guardar cuando existen errores de validación.
Como se indicó anteriormente, las interfaces IDataErrorInfo proporcionan validación para las propiedades de ViewModel vinculadas a datos. Puede implementar reglas de validación personalizadas o utilizar los atributos de validación disponibles en System.ComponentModel.DataAnnotations.
He descubierto que muchos de los tutoriales sobre el tema están intrincados con más "pelusas" y que pueden dificultar que alguien que comienza con WPF capte el concepto. Escribí un tutorial directo al punto en refactorthis.net llamado WPF Validation tutorial for the rest of us. Learn to use IDataErrorInfo to automatically validate your views.
- 1. ¿Cómo funciona IDataErrorInfo?
- 2. DataAnnotations combinando y IDataErrorInfo para WPF
- 3. IDataErrorInfo versus IValidatableObject?
- 4. ¿Qué es WPF y cómo se compara con WinForms?
- 5. IDataErrorInfo en winforms
- 6. Qué es VertiPaq y cómo funciona
- 7. ¿Qué hace InitializeComponent() y cómo funciona en WPF?
- 8. ¿WPF funciona con C++?
- 9. WPF ¿Validación de datos? ¿Hay algo mejor que IDataErrorInfo?
- 10. ¿Qué es un archivo IOR, qué hace y cómo funciona?
- 11. IDataErrorInfo contra ValidationRule vs Exception
- 12. ¿Por qué FontStretch no funciona en WPF?
- 13. ¿Qué es exactamente WPF?
- 14. WPF: ComboBox TextSearch, ¿cómo funciona?
- 15. DataAnnotations vs IDataErrorInfo
- 16. WPF - ¿Por qué no funciona Keyboard.Focus()?
- 17. ¿Qué es android: weightSum en android, y cómo funciona?
- 18. ¿Qué es el nombre de manipulación, y cómo funciona?
- 19. CRUD simple funciona con WPF y enlace de datos
- 20. WPF/Prism: ¿Qué es un contenedor UNITY?
- 21. ¿Qué tan estable es WPF?
- 22. ¿En qué consiste IIS y cómo funciona?
- 23. Qué archivos .sdf. Cómo es diferente de los archivos .mdf. ¿Funciona con linq a Sql?
- 24. Uso de IDataErrorInfo en M-V-VM
- 25. WPF formulario de validación antes de la actualización de origen utilizando IDataErrorInfo
- 26. WPF con C++, ¿es posible?
- 27. ¿Cómo funciona la aceleración de hardware con WPF?
- 28. ¿Cómo funciona la propiedad WPF Button.IsCancel?
- 29. ¿Por qué WPF MediaElement no funciona en el monitor secundario?
- 30. ¿Por qué es "<?" ya no funciona y en su lugar solo funciona "<? php"?
Gracias por la respuesta rápida. De hecho, me preguntaba cómo funciona el cableado detrás de escena. Como soy nuevo en el mundo de WPF, me preguntaba cómo sabe exactamente Runtime que extender IDataErrorInfo activará la validación. Tu explicación es de gran ayuda, pero todavía estoy un poco confundido por cómo están conectadas las cosas juntas. –
Básicamente, si inserta UpdatesOnValidationError, cada vez que una propiedad cambia (lo que WPF conoce a través de INotifyPropertyChanged o el mecanismo de propiedad de dependencia), comprueba la información de IDataError para esa propiedad. Si hay un error, cambia la plantilla. –
Gracias Reed. Las cosas se están aclarando. En mi XAML, para mi Textbox.Text, estoy pensando en insertar lo siguiente: lo que califica como UpdatesOValidationError aquí? ¿ValidatesOnTargetUpdated = "True", llama a la propiedad Error del texto? –