كيفية القيام بما يلي: تنفيذ التحقق من صلاحية الربط

يوضح هذا المثال كيفية استخدام ErrorTemplate و مشغّل نمط لتوفير ملاحظات مرئية لإعلام المستخدم عند إدخال قيمة غير صالحة ، استناداً إلى قاعدة التحقق من الصحة المخصصة.

مثال

محتوى النص TextBox في المثال التالي يتم ربطها Age الخاصية (من نوع Int) لكائن باسم مصدر الربط ods. يتم إعداد الربط لاستخدام قاعدة التحقق من الصحة باسم AgeRangeRule حتى إذا قام المستخدم بإدخال أحرف غير رقمية أو قيمة أصغر من 21 أو أكبر من 130 , تظهر علامة تعجب حمراء بجوار مربع النص ثم يظهر تلميح أداة برسالة خطأ عندما يقوم المستخدم بتحريك الماوس فوق مربع النص.

<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>

يظهر المثال التالي تطبيق AgeRangeRule ، الذي يرث من ValidationRule و يتجاوز Validate أسلوب. يتم استدعاء الأسلوب Int32.Parse() على القيمة للتأكد من أنها لا تحتوي على أية أحرف غير صالحة. Validate يقوم الأسلوب بإرجاع ValidationResult التي تشير إلى إذا كانت القيمة صالحة مستندا إلى ما إذا كان مصادفة استثناء أثناء تحليل ما إذا كانت قيمة العمر خارج الحدود السفلية و العليا.

public class AgeRangeRule : ValidationRule
{
    private int _min;
    private int _max;

    public AgeRangeRule()
    {
    }

    public int Min
    {
        get { return _min; }
        set { _min = value; }
    }

    public int Max
    {
        get { return _max; }
        set { _max = value; }
    }

    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 + ".");
        }
        else
        {
            return new ValidationResult(true, null);
        }
    }
}

يظهر المثال التالي ControlTemplate validationTemplate المخصصة التي تنشئ علامة تعجب حمراء لإعلام المستخدم من خطأ التحقق من الصحة. يتم استخدام قوالب التحكم لإعادة تعريف مظهر عنصر التحكم.

<ControlTemplate x:Key="validationTemplate">
  <DockPanel>
    <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
    <AdornedElementPlaceholder/>
  </DockPanel>
</ControlTemplate>

كما هو موضح في المثال التالي ToolTip الذي يظهر رسالة خطأ يتم إنشاءها باستخدام النمط المسمى textBoxInError. إذا القيمة HasError هي true ، المشغّل يعين أداة التلميح من TextBox إلى أول خطأ للتحقق من الصحة. RelativeSource يتم تعيينه إلى Self ، مرجعية إلى العنصر الحالي.

<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>

للحصول على المثال الكامل ، راجع نموذج صلاحية الربط .

لاحظ أنه إذا لم توفر مخصصة ErrorTemplate يوفر قالب الخطأ ملاحظات مرئية للمستخدم عند وجود خطأ التحقق من الصحة. راجع "التحقق من صحة البيانات" في نظرة عامة لربط البيانات للحصول على مزيد من المعلومات. أيضاً، WPF يوفر قاعدة التحقق من الصحة مضمنة التي تمسك بالاستثناءات التي تطرح أثناء تحديث خاصية مصدر الربط. لمزيد من المعلومات، راجع ExceptionValidationRule.

راجع أيضًا:

المبادئ

نظرة عامة لربط البيانات

موارد أخرى

المواضيع الإجرائية لربط البيانات