Postupy: Implementace ověření připojení

Tento příklad ukazuje, jak použít ErrorTemplate trigger stylu a poskytnout vizuální zpětnou vazbu, která uživatele informuje, když je zadána neplatná hodnota na základě vlastního ověřovacího pravidla.

Příklad

Textový obsah TextBox v následujícím příkladu je vázán na Age vlastnost (typu int) vazby zdrojového objektu s názvem ods. Vazba je nastavena tak, aby používala ověřovací pravidlo pojmenované AgeRangeRule tak, aby pokud uživatel zadal nečíselné znaky nebo hodnotu menší než 21 nebo větší než 130, zobrazí se vedle textového pole červený vykřičník a zobrazí se popis s chybovou zprávou, když uživatel přesune ukazatel myši na textové pole.

<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>

Následující příklad ukazuje implementaci AgeRangeRule, která dědí z ValidationRule a přepíše metodu Validate . Metoda Int32.Parse je volána na hodnotu, aby se ujistil, že neobsahuje žádné neplatné znaky. Metoda Validate vrátí ValidationResult hodnotu, která označuje, zda je hodnota platná na základě toho, zda je zachycena výjimka během analýzy a zda je věková hodnota mimo dolní a horní hranice.

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;
    }
}
Public Class AgeRangeRule
    Inherits ValidationRule

    ' Properties
    Public Property Max As Integer
    Public Property Min As Integer
        
    ' Methods
    Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
        Dim num1 As Integer = 0
        Try 
            If (CStr(value).Length > 0) Then
                num1 = Integer.Parse(CStr(value))
            End If
        Catch exception1 As Exception
            Return New ValidationResult(False, $"Illegal characters or {exception1.Message}")
        End Try
        If ((num1 < Min) OrElse (num1 > Max)) Then
            Return New ValidationResult(False, $"Please enter an age in the range: {Min}-{Max}.")
        End If
        Return ValidationResult.ValidResult
    End Function

End Class

Následující příklad ukazuje vlastní ControlTemplatevalidationTemplate , který vytvoří červený vykřičník, který uživatele upozorní na chybu ověření. Šablony ovládacích prvků slouží k předefinování vzhledu ovládacího prvku.

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

Jak je znázorněno v následujícím příkladu, ToolTip zobrazí se chybová zpráva pomocí stylu s názvem textBoxInError. Pokud je truehodnotaHasError, trigger nastaví popis aktuálního TextBox prvku na první chybu ověření. Je nastavena RelativeSource na Selfhodnotu odkazující na aktuální prvek.

<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>

Úplný příklad najdete v ukázce ověření vazby.

Všimněte si, že pokud nezadáte vlastní ErrorTemplate výchozí šablonu chyby, zobrazí se uživateli vizuální zpětná vazba, když dojde k chybě ověření. Další informace najdete v tématu Ověření dat v přehledu datových vazeb. WPF také poskytuje integrované ověřovací pravidlo, které zachytává výjimky, které jsou vyvolány během aktualizace zdrojové vlastnosti vazby. Další informace najdete na webu ExceptionValidationRule.

Viz také