Bagikan melalui


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