validationrule validate error assist wpf validation xaml

assist - ¿Cuál es la diferencia entre ValidatesOnNotifyDataErrors y ValidatesOnDataErrors y NotifyOnValidationError en la validación de WPF?



wpf combobox validate (1)

ValidatesOnNotifyDataErrors y ValidatesOnDataErrors se usan cuando desea que un control vinculado XAML valide su entrada en función de una interfaz implementada en ViewModel / Model, para ValidatesOnNotifyDataErrors esa interfaz es INotifyDataErrorInfo y para ValidatesOnDataErrors es IDataErrorInfo .
por ejemplo, supongamos que tienes un modelo de vista como este:

class PersonViewModel : IDataErrorInfo { public string FirstName {get; set;} string IDataErrorInfo.Error { return string.Empty; } string IDataErrorInfo.this[string columnName] { if (columnName == "FirstName" &&) { if (this.FirstName.Length > 20) return "FirstName can''t be more than 20 characters."; } return string.Empty; } }

y en su opinión tiene un cuadro de texto que está vinculado a la propiedad FirstName como esta: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} /> ahora si el usuario ingresó 20 caracteres o más en el cuadro de texto se producirá un error ser detectado.

Por otro lado, NotifyOnValidationError se utiliza cuando desea que se NotifyOnValidationError un evento cuando el enlace falla la validación.

Usualmente uso ValidatesOnDataErrors en mis controles XAML para la validación y no he tenido necesidad de los otros dos, por lo que depende de su situación.

EDITAR: estoy actualizando mi respuesta ya que he aprendido algunas cosas nuevas, así que tengo que hacer esto más relevante.

ValidatesOnDataErrors se utiliza en clientes gruesos o, en otras palabras, cuando la validación se realiza en el lado del cliente, como una aplicación WPF o WinForm de escritorio, y los objetos modelo implementan IDataErrorInfo .

Por otro lado, ValidatesOnNotifyDataErrors sería una mejor opción para los clientes ligeros (aplicaciones de varios niveles) como las aplicaciones cliente-servidor (Silverlight, WPF con WCF, etc.) donde la validación tiene lugar en el servidor.

De esta forma, cuando el usuario escribe algo, por ejemplo, en un TextBox, el valor se envía al servidor de forma asincrónica para la validación, y cuando los resultados de validación regresan se produce un evento (el evento ErrorsChanged es exacto) , luego la vista lo levanta y muestra utilizando el método apropiado, por supuesto en este caso el modelo implementaría INotifyDataErrorInfo .

En la validación de WPF , cuál es la diferencia entre los siguientes:

ValidatesOnNotifyDataErrors = True

ValidatesOnDataErrors = True

NotifyOnValidationError = True

¿Cuándo debería usar estas propiedades correctamente en XAML?