استخدام التحقق من الصحة في WPF مع خاصية التبعية ومشغلات النمط

StackOverflow https://stackoverflow.com/questions/96377

  •  01-07-2019
  •  | 
  •  

سؤال

أحاول استخدام التحقق من الصحة في WPF.لقد قمت بإنشاء NotNullOrEmptyValidationRule كما هو موضح أدناه:

public class NotNullOrEmptyValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (String.IsNullOrEmpty(value as String))
                return new ValidationResult(false, "Value cannot be null or empty");

            return new ValidationResult(true, null); 
        }
    }

الآن، أنا بحاجة لاستخدامه في طلبي.في ملف App.xaml الخاص بي، قمت بتعريف نمط TextBox.هنا هو الإعلان.

 <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">

            <Setter Property="Background" Value="Green"/>

            <Style.Triggers>

                <Trigger Property="Validation.HasError" Value="True">

                    <Setter Property="Background" Value="Red"/>
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>

                </Trigger>

            </Style.Triggers>

        </Style>

الآن، أريد استخدامه على TextBox الخاص بي، لذلك أستخدم الكود التالي:

  <TextBox Style="{StaticResource textBoxStyle}">
                <TextBox.Text>
                    <Binding>
                        <Binding.ValidationRules>
                            <NotNullOrEmptyValidationRule />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>


            </TextBox>

يأتي الخطأ في Tag NotNullOrEmptyValidationRule.مدقق بناء جملة XAML غير قادر على حل NotNullOrEmptyValidationRule.لقد حاولت أيضًا وضع مساحة الاسم ولكن لا يبدو أنها تعمل.

هل كانت مفيدة؟

المحلول

أرى أن الارتباط الخاص بك في TextBox تم تعيينه على مسار "النص" - هل هذا حقل مهما كان سياق البيانات الخاص بمربع النص هذا؟هل يحصل مربع النص بالفعل على قيمة توضع فيه؟أيضًا، إذا قمت بوضع نقطة توقف في طريقة التحقق الخاصة بك، فهل سيتم فصلها من أي وقت مضى؟

قد ترغب في البحث عن كيفية تسجيل حالات الفشل في الربط ومراجعتها أيضًا.

نصائح أخرى

تحتاج فقط إلى إضافة xmlns إلى نافذتك، واستخدام ذلك للإشارة إلى ValidationRule الخاص بك.

في WPF، الكائن جيد تمامًا لاستخدامه من نفس التجميع.

نظرًا لأن قاعدتك لم يتم تعريفها في مساحة اسم XAML القياسية، فيجب عليك إنشاء تعيين لمساحة اسم clr الخاصة بك كما يلي:

<Window ...
    xmlns:local="clr-namespace:MyNamespaceName">

وبعد ذلك سوف تستخدمه مثل هذا:

<Binding Path=".">
    <Binding.ValidationRules>
        <local:NotNullOrEmptyValidationRule />
    </Binding.ValidationRules>
</Binding>

يحررأضفت بيان المسار إلى Binding.عليك أن تخبر الرابط بما يجب ربطه :)

ليس لديك هذا السطر في الكود الخاص بك خلفك

Public Sub New()

    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    Me.**NameOfTextBox**.DataContext = Me
End Sub

يوجد خطأ في Visual Studio وExpression Blend يسبب هذه المشكلة.ما عليك القيام به هو التأكد من أن قاعدة التحقق من الصحة موجودة في مشروع/تجميع منفصل يمكنك الرجوع إليه.هذا يجب حل المشكلة.

ومع ذلك، سيتعين عليك إضافة مساحة الاسم مرة أخرى حتى تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top