Nasıl yapılır: Bağlama Doğrulaması Uygulama
Bu örnekte, özel doğrulama ErrorTemplate kuralına göre geçersiz bir değer girildiğinde kullanıcıya bilgi vermek üzere görsel geri bildirim sağlamak için ve stil tetikleyicisinin nasıl kullanılacağı gösterilmektedir.
Örnek
Aşağıdaki örnekte öğesinin TextBox metin içeriği, adlı ods
bağlama kaynak nesnesinin Age
özelliğine (int türünde) bağlıdır. Bağlama, adlı AgeRangeRule
bir doğrulama kuralı kullanacak şekilde ayarlanır, böylece kullanıcı sayısal olmayan karakterler veya 21'den küçük veya 130'dan büyük bir değer girerse, metin kutusunun yanında kırmızı bir ünlem işareti görünür ve kullanıcı fareyi metin kutusunun üzerine getirince hata iletisini içeren bir araç ipucu görüntülenir.
<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>
Aşağıdaki örnek, yöntemini devralan ValidationRule ve geçersiz kılan Validate uygulamasını AgeRangeRule
gösterir. yöntemi Int32.Parse
, geçersiz karakter içermediğinden emin olmak için değerde çağrılır. yöntemi, Validate ayrıştırma sırasında bir özel durumun yakalanıp yakalanmadığına ve yaş değerinin alt ve üst sınırların dışında olup olmadığına bağlı olarak değerin geçerli olup olmadığını gösteren bir ValidationResult döndürür.
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
Aşağıdaki örnek, kullanıcıya doğrulama hatası bildirmek için kırmızı bir ünlem işareti oluşturan özel ControlTemplate validationTemplate
öğeyi gösterir. Denetim şablonları, denetimin görünümünü yeniden tanımlamak için kullanılır.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Aşağıdaki örnekte gösterildiği gibi, ToolTip hata iletisini gösteren, adlı textBoxInError
stil kullanılarak oluşturulur. değeri HasError ise true
tetikleyici, geçerlinin TextBox araç ipucunu ilk doğrulama hatasına ayarlar. RelativeSource, geçerli öğeye Selfbaşvuran olarak ayarlanır.
<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>
Veri nesnesi
Aşağıdaki kod parçacığı, önceki kod örneklerinde kullanılan veri nesnesidir. XAML'de anahtarıyla ods
statik bir kaynak olarak bir örnek oluşturulur:
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
Tam örnek
Tam örnek için bkz . Bağlama Doğrulama örneği.
Özel ErrorTemplate bir hata sağlamazsanız, doğrulama hatası olduğunda kullanıcıya görsel geri bildirim sağlamak için varsayılan hata şablonunun göründüğünü unutmayın. Daha fazla bilgi için Bkz. Veri Bağlamaya Genel Bakış'ta "Veri Doğrulama". Ayrıca WPF, bağlama kaynak özelliğinin güncelleştirmesi sırasında oluşturulan özel durumları yakalayan yerleşik bir doğrulama kuralı sağlar. Daha fazla bilgi için bkz. ExceptionValidationRule.
Ayrıca bkz.
.NET Desktop feedback