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>
<local: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 override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int age = 0;
try
{
if (((string)value).Length > 0)
age = int.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í ControlTemplate validationTemplate
, 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 true
hodnotaHasError, 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)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Datový objekt
Následující fragment kódu je datový objekt použitý v předchozích příkladech kódu. Instance se vytvoří v XAML jako statický prostředek s klíčem ods
:
public class MyDataSource
{
public MyDataSource()
{
Age = 0;
Age2 = 0;
}
public int Age { get; set; }
public int Age2 { get; set; }
public int Age3 { get; set; }
}
Public Class MyDataSource
Public Sub New()
Me.Age = 0
Me.Age2 = 0
End Sub
Public Property Age As Integer
Public Property Age2 As Integer
Public Property Age3 As Integer
End Class
Kompletní příklad
Ú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é
.NET Desktop feedback