Nasıl yapılır: Bağlama Doğrulaması Uygulama

Bu örnek ErrorTemplate , bir özel doğrulama kuralına bağlı olarak geçersiz bir değer girildiğinde kullanıcıya bilgilendirmek için görsel geribildirim sağlamak üzere bir ve stil tetikleyicisinin nasıl kullanılacağını gösterir.

Örnek

Aşağıdaki örnekteki öğesinin metin içeriği TextBoxAge adlı bir bağlama kaynak nesnesinin özelliğine (int türünde) bağlanır ods . Bağlama, AgeRangeRule Kullanıcı sayısal olmayan karakterler veya 21 ' den daha küçük bir değer girerse veya 130 ' den büyük bir değer girerse, metin kutusunun yanında kırmızı bir ünlem işareti ve Kullanıcı fareyi metin kutusunun üzerine taşırken hata iletisiyle birlikte bir araç ipucu görünür.

<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>
        <c:AgeRangeRule Min="21" Max="130"/>
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

Aşağıdaki örnek AgeRangeRule , öğesinden devralan ValidationRule ve geçersiz kılacak öğesinin uygulamasını gösterir Validate . Int32.ParseYöntemi, geçersiz karakter içermediğinden emin olmak için değer üzerinde çağrılır. ValidateYöntemi, bir ValidationResult özel durumun ayrıştırma sırasında yakalanıp yakalanmadığını 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ı belirten bir döndürür.

public class AgeRangeRule : ValidationRule
{
    public int Min { get; set; }
    public int Max { get; set; }

    public AgeRangeRule()
    {
    }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        int age = 0;

        try
        {
            if (((string)value).Length > 0)
                age = Int32.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, ControlTemplatevalidationTemplate kullanıcıya doğrulama hatası bildirmek için kırmızı bir ünlem işareti oluşturan özel bir gösterir. Denetim şablonları, bir 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ı stil kullanılarak oluşturulur textBoxInError . Değeri HasError ise true , tetikleyici geçerli olan araç ipucunu TextBox ilk doğrulama hatasına ayarlar. , RelativeSourceSelf Geçerli öğeye baş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)/ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

Tüm örnek için bkz. bağlama doğrulama örneği.

Özel bir ErrorTemplate doğrulama hatası olduğunda kullanıcıya görsel geri bildirim sağlamak için, özel bir hata şablonu sunmayacağınızı unutmayın. Daha fazla bilgi için veri bağlamaya genel bakış bölümüne bakın. Ayrıca WPF, bağlama kaynağı özelliğinin güncelleştirilmesi 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.