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.

Ejemplo

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.

Vea también

Tareas

Cómo: Implementar la validación de enlaces

Referencia

ExceptionValidationRule

Otros recursos

Ejemplos de enlace de datos

Temas "Cómo..." sobre enlace de datos