2010-12-05 11 views
9

एक नया WPF programer जैसा कि मैंने नहीं कर सकते उपयोगकर्ता इनपुट को मान्य करने के दो अलग-अलग तरह से बीच का अंतर पाते हैं:WPF में मान्यता - कस्टम सत्यापन नियम या IDataErrorInfo

क्या पेशेवरों और IDataErrorInfo को लागू करने के खिलाफ कस्टम सत्यापन नियम लिखने की विपक्ष कर रहे हैं, और इसके विपरीत? जब मैं एक दूसरे को पसंद करूं?

अद्यतन:

हालांकि मैं अपने जवाब पहले से ही, मैं related article दूसरों की मदद कर सकते हैं कि पाया गया।

उत्तर

20

असल में, यदि आप IDataErrorInfo लागू करते हैं, तो बाध्य वस्तु में सत्यापन लागू किया जाता है, जबकि यदि आप सत्यापन नियम लागू करते हैं, तो बाध्यकारी से जुड़ी वस्तुओं में सत्यापन लागू किया जाता है।

व्यक्तिगत रूप से, अगर आप MVVM का उपयोग कर रहे हैं, मुझे लगता क्या तुमने कभी IDataErrorInfo के अलावा कुछ का उपयोग करने के पागल होने के लिए होगा। आप सत्यापन दृश्य मॉडल में जीना चाहते हैं । यदि यह आपके दृश्य मॉडल में है, तो यह केंद्रीकृत है और यह परीक्षण योग्य है। यदि यह आपके विचार में है, तो आपका सत्यापन तर्क गलत हो सकता है, या गायब हो सकता है, और इसे खोजने का एकमात्र तरीका मैन्युअल रूप से आपके दृश्य का परीक्षण करना है। यह टालने योग्य बग का एक बड़ा संभावित स्रोत है।

ऐसे स्थान हैं जहां सत्यापन नियमों का उपयोग करना समझ में आता है - उदाहरण के लिए, आप गूंगा वस्तुओं (उदाहरण के लिए XmlDataSource) के आसपास यूआई बना रहे हैं। लेकिन ज्यादातर उत्पादन अनुप्रयोगों के लिए, मैं इसके पास नहीं जाऊंगा।

+0

बहुत जानकारीपूर्ण, बहुत बहुत धन्यवाद! –

+3

एक ValidationRule का उपयोग करने से संभावित लाभ है कि आप मूल्य सत्यता की जांच कर सकते से पहले ViewModel अनुचित मान में बदल जाता है। –

+3

मुझे लगता है कि प्रमाणीकरण नियम केवल तभी उपयुक्त हैं जब आप एमवीवीएम का उपयोग नहीं कर रहे हैं। यदि आप दृश्य मॉडल में देखने से दृश्य में दर्ज डेटा को रोकने के लिए प्रमाणीकरण नियम का उपयोग करते हैं, तो दृश्य मॉडल अब दृश्य को मॉडलिंग नहीं कर रहा है।इसे और अधिक अपारदर्शी बनाये बिना इन सभी चीजों को समझना काफी कठिन है। –

-1

आप IDataErrorInfo लागू ईएएस के साथ डेटा बाइंडिंग उपयोग करने में सक्षम होने के लिए। आप अभी भी अपने कस्टम सत्यापन नियमों का निर्माण करते हैं।

+0

मुझे यकीन है कि मैं पूरी तरह से अपने जवाब से समझ नहीं कर रहा हूँ: मैं IDataErrorInfo लागू कर सकते हैं, या ValidationRule और ओवरराइड 'मान्य' विधि से विरासत ... मैं उन दोनों को उपयोग नहीं कर रहा एक ही समय में। क्या मै गलत हु? –

1

IDataErrorInfo

  • मान्यता तर्क दृश्य मॉडल और आसान में रखने को लागू करने और viewmodel में सभी क्षेत्रों पर बनाए रखने के
  • पूर्ण नियंत्रण के लिए

मान्यता नियम

  • अलग वर्ग
  • वृद्धि फिर से प्रयोज्य में सत्यापन नियम बनाये रखता है। उदाहरण के लिए आप आवश्यक फ़ील्ड सत्यापन कक्षा को लागू कर सकते हैं, इसे पूरे एप्लिकेशन में पुन: उपयोग करें।

मेरी राय सामान्य सत्यापन सत्यापन के लिए सामान्य सत्यापन मान्यताओं के लिए है, ईमेल पता वैधताएं आप सत्यापन नियम का उपयोग कर सकते हैं। यदि आपको सीमा सत्यापन जैसे कस्टम सत्यापन करने की आवश्यकता है, या जो भी कस्टम सत्यापन IDataerrorinfo का उपयोग करें।

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