Cómo: Implementar lógica de validación en objetos personalizados
Actualización: noviembre 2007
En este ejemplo se muestra cómo implementar la lógica de validación en un objeto personalizado y, a continuación, enlazar a este objeto.
Puede proporcionar lógica de validación en la capa de negocios si el objeto de origen implementa IDataErrorInfo, como en el ejemplo siguiente:
public class Person : IDataErrorInfo { private int age; public int Age { get { return age; } set { age = value; } } public string Error { get { return null; } } public string this[string name] { get { string result = null; if (name == "Age") { if (this.age < 0 || this.age > 150) { result = "Age must not be less than 0 or greater than 150."; } } return result; } } }
En el ejemplo siguiente, la propiedad de texto del cuadro de texto enlaza a la propiedad Age del objeto Person, que está disponible para el enlace mediante una declaración de recurso a la que se asigna el atributo x:Keydata. DataErrorValidationRule comprueba los errores de validación provocados por la implementación de IDataErrorInfo.
<TextBox Style="{StaticResource textBoxInError}"> <TextBox.Text> <!--By setting ValidatesOnExceptions to True, it checks for exceptions that are thrown during the update of the source property. An alternative syntax is to add <ExceptionValidationRule/> within the <Binding.ValidationRules> section.--> <Binding Path="Age" Source="{StaticResource data}" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <!--DataErrorValidationRule checks for validation errors raised by the IDataErrorInfo object.--> <!--Alternatively, you can set ValidationOnDataErrors="True" on the Binding.--> <DataErrorValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>
Como alternativa, en lugar de usar DataErrorValidationRule, puede establecer la propiedad ValidatesOnDataErrors en true.
Para obtener el ejemplo completo, vea Ejemplo Business Layer Validation.