إجراء التحقق من الصحة على كائن مرتبط بالبيانات بعد تحديث الخاصية

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

سؤال

لدي نموذج أساسي يحتوي على عناصر تحكم مرتبطة بكائن يقوم بتنفيذ ملف INotifyPropertyChanged واجهه المستخدم.أرغب في إضافة بعض التحقق من الصحة إلى بعض الخصائص ولكني لا أرغب في متابعة التنفيذ IDataErrorInfo من أجل التحقق من صحة اثنين من الخصائص.

لقد قمت بإنشاء الوظائف التي تقوم بالتحقق من الصحة وإرجاع رسالة الخطأ (إن أمكن) في الكائن.ما أود فعله هو استدعاء هذه الوظائف من النموذج الخاص بي عندما تتغير الخصائص ذات الصلة بالكائن، وإعداد ملف ErrorProvider التحكم في النموذج الخاص بي مع أي رسائل خطأ تم إرجاعها من وظائف التحقق من الصحة.

لقد حاولت ربط معالجات الأحداث بحدثي التحقق من الصحة وLostFocus، ولكن يبدو أن هذه المعالجات تنشط قبل تحديث الكائن الخاص بي، وبالتالي فهي لا تتحقق من صحة البيانات الصحيحة.فقط عندما أغادر مربع النص وأعود إليه ثم أغادره مرة أخرى، يتم إجراء التحقق مقابل البيانات الصحيحة.

هل هناك حدث آخر يمكنني ربطه حتى أتمكن من استدعاء وظائف التحقق من الصحة هذه بعد تحديث الخاصية الموجودة على الكائن الخاص بي؟أو هل من الأفضل أن أطبق فقط IDataErrorInfo واجهه المستخدم؟

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

المحلول

لست متأكدًا تمامًا من المشكلة، هل تقول أنه لا يمكنك ضبط الخاصية حتى يفقد عنصر التحكم التركيز؟

إذا كان الأمر كذلك، فأنت بحاجة إلى تعيين الارتباط للتحديث OnPropertyChanged بدلاً من OnValidation.

ملزمة ل OnPropertyChanged يعني أنه يتم تحديث الربط على الفور، بينما OnValidation يقوم فقط بتحديث الكائن الأساسي عند تشغيل التحقق من الصحة (والذي يحدث بالنسبة لمعظم عناصر التحكم عندما تفقد التركيز).

نصائح أخرى

أعتقد أنني وجدت حلاً للمشكلة بمساعدة منشور كاميرون.لقد قمت بتغيير الارتباط لتحديث OnPropertyChanged والآن عندما أقوم بتوصيل معالج الحدث إلى حدث LostFocus، يتم إجراء التحقق من الصحة على القيمة "الجديدة" من مربع النص بدلاً من ما تم الاحتفاظ به مسبقًا في الكائن

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