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ı odsbağ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ı AgeRangeRulegö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ı textBoxInErrorstil kullanılarak oluşturulur. değeri HasError ise truetetikleyici, 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 odsstatik 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.