2010-09-09 16 views
18

यह एक WPF whodunnit का एक छोटा सा है! मेरे मान्यता मंदिरों यह दिखाई नहीं दे रहा है, जब उम्मीद
प्रमाणीकरण त्रुटि डेटा त्रुटियों पर प्रदर्शित नहीं हो रहा है

समस्या

असल में, मैं मेरे विचार मॉडल पर IDataErrorInfo उपयोग कर रहा हूँ डेटा प्रविष्टि त्रुटियों पर प्रतिक्रिया देने के लिए। मैं इसे उम्मीद के रूप में बुलाया और काम कर रहा हूं, लेकिन बाध्य नियंत्रण के लिए सत्यापन त्रुटि टेम्पलेट WPF द्वारा कभी प्रदर्शित नहीं होता है!

मैंने अंतर्निहित डिफ़ॉल्ट टेक्स्टबॉक्स लाल सीमा त्रुटि टेम्पलेट, एक शैली त्रुटि टेम्पलेट, और एक हार्ड कोडित टेम्पलेट का उपयोग करने की कोशिश की है। इनमें से कोई भी डेटा त्रुटि स्थिति में प्रदर्शित नहीं होता है।

यहाँ मेरा XAML बाइंडिंग कोड:

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

Wierdly, त्रुटि Validation.Errors संग्रह में हो जाता है। बाध्य नियंत्रण के बगल में प्रदर्शित होने वाले मेरे IDataErrorInfo त्रुटि संदेश में अनुवर्ती कोड परिणाम। इससे मुझे लगता है कि समस्या xaml पक्ष पर है, बल्कि व्यूमोडल पक्ष है।

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

साथ ही, System.Windows.Controls.Validation.GetHasError(txtCaseNumber) रिटर्न सच।

यदि मैं कोई फर्क पड़ता हूं तो मैं Winforms में WPF होस्ट कर रहा हूं। मुझे सत्यापन या त्रुटि टेम्पलेट में मेरे कोड या शैलियों में कोई संदर्भ नहीं मिल रहा है, इसलिए मुझे पूरा यकीन है कि यह एक स्टाइलिंग लक्ष्य नहीं है।

उत्तर

41

इसे क्रैक किया गया।

IDTErrorInfo के माध्यम से रिपोर्ट की गई डेटा सत्यापन विफलताओं पर त्रुटि टेम्पलेट्स दिखाने के लिए त्रुटि टेम्पलेट संलग्न संपत्ति uses the adorner layer। सभी परिस्थितियों में सभी नियंत्रणों के लिए एडॉर्नर परत not always available है। आपका नियंत्रण या उसके माता-पिता में से एक को स्पष्ट रूप से एक प्रदान करना होगा।

डिफ़ॉल्ट विंडो नियंत्रण टेम्पलेट में एक एडॉर्नर डिकोरेटर होता है जो अपने बच्चों के लिए एडॉर्नर परत को सक्षम बनाता है। यही कारण है कि मेरी दूसरी विंडो ने मेरे त्रुटि टेम्पलेट्स को ठीक दिखाया, क्योंकि इस विंडो ने डिफ़ॉल्ट नियंत्रण टेम्पलेट

विंडो जो मेरी त्रुटि टेम्पलेट नहीं दिखाती थी, ने एक शैली का उपयोग किया था जो मेरी विंडो के लिए ControlTemplate प्रदान करता था। इस नियंत्रण टेम्पलेट ने <AdornerDecorator> प्रदान नहीं किया, इसलिए मेरा त्रुटि टेम्पलेट दिखाने के लिए कोई एडोर्नर परत नहीं है।

यह फिक्स मेरे विंडो नियंत्रण टेम्पलेट को <AdornerDecorator> के साथ लपेटने जितना सरल था।

+5

मैं आपको अपनी टोपी टिपता हूं, महोदय! मेरे पास एक वीएस एक्सटेंशन में UserControl> विस्तारक> टेक्स्टबॉक्स था। लेकिन यह IDataErrorInfo त्रुटियों को नहीं दिखाएगा। यूसी - जारी रखने के लिए एक नमूना WPF ऐप बनाया गया (जारी रखने के लिए वीएस एक्सटीएन अस्वीकार)। एक और वीएम बनाया - जिसने काम किया वीएम से इंकार कर दिया। फिर मैंने आपकी पोस्ट को हिट किया - खिड़की और यूसी में कुछ लोडेड इवेंट हैंडलर जोड़े। निश्चित रूप से, यूसी ने एक नल AdornerLayer लौटा दिया। AdornerDecorator के साथ विस्तारक सामग्री लपेटा और यह काम किया! मुझे 2 दिनों तक धीमा कर दिया .. मुझे लगता है कि जी सीखो। एक बार फिर, वंश के लिए इसे दस्तावेज करने के लिए दृढ़ता और समय के लिए धन्यवाद !! – Gishu

+0

कोई जांच नहीं! मैं इसके साथ 2 दिन भी खो गया :( –

+1

यह सिर्फ मेट्रो-स्टाइल विंडो के साथ मेरी समस्या को ठीक करता है जिसने एडॉर्नर डिकोरेटर प्रदान नहीं किया। धन्यवाद! – mortware

संबंधित मुद्दे