Vorgehensweise: Implementieren der BindungsvalidierungHow to: Implement Binding Validation

Dieses Beispiel zeigt, wie Sie mit einem ErrorTemplate und ein Formattriggers zum Bereitstellen von visuellen Feedback, um den Benutzer zu informieren, wenn ein ungültiger Wert eingegeben wird, auf Grundlage einer benutzerdefinierten Validierungsregel.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.

BeispielExample

Der Textinhalt von der TextBox im folgenden Beispiel an gebunden ist die Age -Eigenschaft (vom Typ "Int") von einem mit dem Namen Bindungsquellen-Objekts 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. Die Bindung ist so eingerichtet, dass die Validierungsregel mit AgeRangeRule verwendet wird. Wenn der Benutzer ein nicht numerisches Zeichen oder einen Wert kleiner als 21 oder größer als 130 eingibt, werden neben dem Textfeld ein rotes Ausrufezeichen und eine QuickInfo mit einer Fehlermeldung angezeigt, sobald der Mauszeiger über das Textfeld bewegt wird.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>

Das folgende Beispiel zeigt die Implementierung der AgeRangeRule, erbt von ValidationRule und überschreibt die Validate Methode.The following example shows the implementation of AgeRangeRule, which inherits from ValidationRule and overrides the Validate method. Die Int32.Parse()-Methode wird für den Wert aufgerufen, um sicherzustellen, dass keine ungültigen Zeichen enthalten sind.The Int32.Parse() method is called on the value to make sure that it does not contain any invalid characters. Die Validate Methode gibt eine ValidationResult die angibt, ob der Wert gültig ist, basierend auf gibt an, ob eine Ausnahme abgefangen wird, während der Analyse und gibt an, ob der Alterswert außerhalb der unter- und Obergrenzen ist.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
{
    public int Min { get; set; }
    public int Max { get; set; }
    
    public AgeRangeRule()
    {
    }

    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}.");
        }
        return ValidationResult.ValidResult;
    }
}

Das folgende Beispiel zeigt die benutzerdefinierte ControlTemplate validationTemplate erstellt ein rotes Ausrufezeichen zur Benachrichtigung des Benutzers eines Validierungsfehlers.The following example shows the custom ControlTemplate validationTemplate that creates a red exclamation mark to notify the user of a validation error. Steuerelementvorlagen werden verwendet, um die Darstellung eines Steuerelements neu zu definieren.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>

Wie im folgenden Beispiel gezeigt die ToolTip , die zeigt die Fehlermeldung wird erstellt, mit dem Stil, die mit dem Namen textBoxInError.As shown in the following example, the ToolTip that shows the error message is created using the style named textBoxInError. Wenn der Wert des HasError ist true, des Triggers legt die QuickInfo des aktuellen TextBox zu den ersten Validierungsfehler.If the value of HasError is true, the trigger sets the tool tip of the current TextBox to its first validation error. Die RelativeSource nastaven NA hodnotu Self, bezieht sich auf das aktuelle Element.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>

Das vollständige Beispiel finden Sie unter Beispiel für Bindungsvalidierung.For the complete example, see Binding Validation Sample.

Beachten Sie, dass Sie keine benutzerdefinierte bereitstellen ErrorTemplate Standardwert wird durch die zum Bereitstellen von visuellem Feedback, die dem Benutzer, wenn ein Überprüfungsfehler vorliegt.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. Weitere Informationen finden Sie unter „Datenvalidierung“ in Übersicht über die Datenbindung.See "Data Validation" in Data Binding Overview for more information. WPFWPF bietet außerdem eine integrierte Validierungsregel, die die während der Aktualisierung der Bindungsquelleneigenschaft ausgelöste Ausnahmen abfängt.Also, WPFWPF provides a built-in validation rule that catches exceptions that are thrown during the update of the binding source property. Weitere Informationen finden Sie unter ExceptionValidationRule.For more information, see ExceptionValidationRule.

Siehe auchSee also