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?