Procedimiento Implementar la validación de enlacesHow to: Implement Binding Validation

En este ejemplo se muestra cómo usar un ErrorTemplate y un desencadenador de estilo para proporcionar comentarios visuales para informar al usuario cuando se escribe un valor no válido, según una regla de validación personalizada.This example shows how to use an ErrorTemplate and a style trigger to provide visual feedback to inform the user when an invalid value is entered, based on a custom validation rule.

EjemploExample

El contenido de texto el TextBox en el ejemplo siguiente se enlaza a la Age propiedad (de tipo int) de un objeto de origen de enlace denominado ods.The text content of the TextBox in the following example is bound to the Age property (of type int) of a binding source object named ods. El enlace se configura para usar una regla de validación denominada AgeRangeRule, por lo que si el usuario especifica caracteres no numéricos o un valor inferior a 21 o superior a 130, aparece un signo de exclamación junto al cuadro de texto y aparece información sobre herramientas con el mensaje de error cuando el usuario coloca el mouse sobre el cuadro de texto.The binding is set up to use a validation rule named AgeRangeRule so that if the user enters non-numeric characters or a value that is smaller than 21 or greater than 130, a red exclamation mark appears next to the text box and a tool tip with the error message appears when the user moves the mouse over the text box.

<TextBox Name="textBox1" Width="50" FontSize="15"
         Validation.ErrorTemplate="{StaticResource validationTemplate}"
         Style="{StaticResource textBoxInError}"
         Grid.Row="1" Grid.Column="1" Margin="2">
  <TextBox.Text>
    <Binding Path="Age" Source="{StaticResource ods}"
             UpdateSourceTrigger="PropertyChanged" >
      <Binding.ValidationRules>
        <c:AgeRangeRule Min="21" Max="130"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

El ejemplo siguiente muestra la implementación de AgeRangeRule, que hereda de ValidationRule e invalida el Validate método.The following example shows the implementation of AgeRangeRule, which inherits from ValidationRule and overrides the Validate method. Se llama al método Int32.Parse() en el valor para asegurarse de que no contiene caracteres no válidos.The Int32.Parse() method is called on the value to make sure that it does not contain any invalid characters. El Validate método devuelve un ValidationResult que indica si el valor es válido según si se detecta una excepción durante el análisis y si el valor de edad está fuera de los límites superior e inferior.The Validate method returns a ValidationResult that indicates if the value is valid based on whether an exception is caught during the parsing and whether the age value is outside of the lower and upper bounds.

public class AgeRangeRule : ValidationRule
{
    private int _min;
    private int _max;

    public AgeRangeRule()
    {
    }

    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }

    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age = 0;

        try
        {
            if (((string)value).Length > 0)
                age = Int32.Parse((String)value);
        }
        catch (Exception e)
        {
            return new ValidationResult(false, "Illegal characters or " + e.Message);
        }

        if ((age < Min) || (age > Max))
        {
            return new ValidationResult(false,
              "Please enter an age in the range: " + Min + " - " + Max + ".");
        }
        else
        {
            return ValidationResult.ValidResult;
        }
    }
}

El ejemplo siguiente muestra el personalizado ControlTemplate validationTemplate que crea un signo de exclamación rojo para avisar al usuario de un error de validación.The following example shows the custom ControlTemplate validationTemplate that creates a red exclamation mark to notify the user of a validation error. Las plantillas de control se usan para redefinir la apariencia de un control.Control templates are used to redefine the appearance of a control.

<ControlTemplate x:Key="validationTemplate">
  <DockPanel>
    <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
    <AdornedElementPlaceholder/>
  </DockPanel>
</ControlTemplate>

Como se muestra en el ejemplo siguiente, la ToolTip que muestra el mensaje de error que se crea utilizando el estilo denominado textBoxInError.As shown in the following example, the ToolTip that shows the error message is created using the style named textBoxInError. Si el valor de HasError es true, el desencadenador establece la información sobre herramientas del elemento actual TextBox a su primer error de validación.If the value of HasError is true, the trigger sets the tool tip of the current TextBox to its first validation error. El RelativeSource está establecido en Self, que hace referencia al elemento actual.The RelativeSource is set to Self, referring to the current element.

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)/ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

Para obtener el ejemplo completo, vea Enlace de ejemplo de validación.For the complete example, see Binding Validation Sample.

Tenga en cuenta que si no proporcionas un personalizado ErrorTemplate aparece de la plantilla de error predeterminada proporcionar comentarios visuales al usuario cuando hay un error de validación.Note that if you do not provide a custom ErrorTemplate the default error template appears to provide visual feedback to the user when there is a validation error. Vea "Validación de datos" en Información sobre el enlace de datos para obtener más información.See "Data Validation" in Data Binding Overview for more information. Además, WPFWPF proporciona una regla de validación incorporada que selecciona las excepciones que se producen durante la actualización de la propiedad del origen de enlace.Also, WPFWPF provides a built-in validation rule that catches exceptions that are thrown during the update of the binding source property. Para obtener más información, consulta ExceptionValidationRule.For more information, see ExceptionValidationRule.

Vea tambiénSee also