سؤال

هذا قليلا من wpf whodunnit! معابد التحقق من الصحة لا تظهر عند المتوقع

المشكلة

في الأساس ، أنا أستخدم idataerrorinfo على نموذج العرض الخاص بي لتقديم ملاحظات على أخطاء إدخال البيانات. أستطيع أن أرى أن هذا يتم استدعاؤه والعمل كما هو متوقع ، لكن قالب خطأ التحقق من الصحة لعنصر تحكم مقيد من قبل WPF!

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

هيريس رمز الربط XAML الخاص بي:

<TextBox x:Name="txtCaseNumber"  
Text="{Binding Path=CaseNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>

بحماس ، يحدث الخطأ في مجموعة التحقق من الصحة. نتائج متابعة رمز في رسالة خطأ IDATAERRORRORINFO يتم عرضها بجوار عنصر التحكم المربوطة. هذا يقودني إلى الاعتقاد بأن المشكلة موجودة على جانب XAML ، بل جانب ViewModel.

<ContentPresenter 
Content="{Binding ElementName=txtCaseNumber, Path=(Validation.Errors).CurrentItem}" />

بالإضافة إلى ذلك،System.Windows.Controls.Validation.GetHasError(txtCaseNumber) يعود صحيح.

أنا أستضيف WPF في WinForms إذا كان ذلك يحدث فرقًا. لا يمكنني العثور على أي مراجع في التعليمات البرمجية الخاصة بي أو أنيفي للتحقق من الصحة أو errortemplate ، لذا فأنا متأكد من أن هذا ليس هدفًا خاصًا بالتصميم.

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

المحلول

تصدعها.

الخاصية المرفقة الخاطئة يستخدم طبقة المزين لإظهار قوالب الخطأ على فشل التحقق من صحة البيانات التي تم الإبلاغ عنها عبر idataerrorinfo. طبقة المزين غير متاح دائما لجميع الضوابط في جميع الحالات. يحتاج سيطرتك أو أحد والديه إلى توفير واحد بشكل صريح.

يحتوي قالب التحكم في النافذة الافتراضي على AdornerDecorator الذي يمكّن الطبقة المزين لأطفالها. لهذا السبب أظهرت نافذتي الأخرى قوالب الخطأ الخاصة بي على ما يرام ، لأن هذه النافذة استخدمت قالب التحكم الافتراضي

كانت النافذة التي لم تظهر قالب الخطأ الخاص بي قد استخدمت نمطًا يوفر ControlTemplate لنافذي. قال قالب التحكم هذا <AdornerDecorator>, ، وبالتالي لا توجد طبقة مزينة لإظهار قالب الخطأ الخاص بي.

كان الإصلاح بسيطًا مثل ملفوف قالب التحكم في النافذة <AdornerDecorator>.

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