Cara: Menerapkan Validasi Pengikatan
Contoh ini menunjukkan cara menggunakan ErrorTemplate pemicu gaya dan untuk memberikan umpan balik visual untuk memberi tahu pengguna saat nilai yang tidak valid dimasukkan, berdasarkan aturan validasi kustom.
Contoh
Konten TextBox teks dalam contoh berikut terikat ke Age
properti (jenis int) dari objek sumber pengikatan bernama ods
. Pengikatan disiapkan untuk menggunakan aturan validasi bernama AgeRangeRule
sehingga jika pengguna memasukkan karakter non-numerik atau nilai yang lebih kecil dari 21 atau lebih besar dari 130, tanda seru merah muncul di samping kotak teks dan tip alat dengan pesan kesalahan muncul ketika pengguna memindahkan mouse ke kotak teks.
<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>
Contoh berikut menunjukkan implementasi AgeRangeRule
, yang mewarisi dari ValidationRule dan mengambil Validate alih metode . Metode Int32.Parse
ini dipanggil pada nilai untuk memastikan bahwa metode tidak berisi karakter yang tidak valid. Metode Validate mengembalikan ValidationResult yang menunjukkan apakah nilai valid berdasarkan apakah pengecualian ditangkap selama penguraian dan apakah nilai usia berada di luar batas bawah dan atas.
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
Contoh berikut menunjukkan kustom ControlTemplate validationTemplate
yang membuat tanda seru merah untuk memberi tahu pengguna tentang kesalahan validasi. Templat kontrol digunakan untuk menentukan ulang tampilan kontrol.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Seperti yang ditunjukkan dalam contoh berikut, ToolTip yang menunjukkan pesan kesalahan dibuat menggunakan gaya bernama textBoxInError
. Jika nilainya HasError adalah true
, pemicu mengatur tip alat saat ini TextBox ke kesalahan validasi pertamanya. RelativeSource diatur ke Self, mengacu pada elemen saat ini.
<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>
Objek data
Cuplikan berikut adalah objek data yang digunakan dalam contoh kode sebelumnya. Instans dibuat di XAML sebagai sumber daya statis dengan kunci :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
Contoh lengkap
Untuk contoh lengkapnya, lihat Sampel Validasi Ikatan.
Perhatikan bahwa jika Anda tidak memberikan templat kesalahan default kustom ErrorTemplate tampaknya memberikan umpan balik visual kepada pengguna ketika ada kesalahan validasi. Lihat "Validasi Data" di Gambaran Umum Pengikatan Data untuk informasi selengkapnya. Selain itu, WPF menyediakan aturan validasi bawaan yang menangkap pengecualian yang dilemparkan selama pembaruan properti sumber pengikatan. Untuk informasi selengkapnya, lihat ExceptionValidationRule .
Lihat juga
.NET Desktop feedback