2013-06-22 4 views
38

WPF मान्यता, में क्या निम्नलिखित के बीच अंतर:WPF सत्यापन में ValidatesOnNotifyDataErrors और ValidatesOnDataErrors और NotifyOnValidationError के बीच क्या अंतर है?

ValidatesOnNotifyDataErrors = सच

ValidatesOnDataErrors = सच

NotifyOnValidationError = सच

जब आप इन गुणों का उपयोग करना चाहिए XAML में सही ढंग से?

उत्तर

43

ValidatesOnNotifyDataErrors और ValidatesOnDataErrors उपयोग किया जाता है जब आप एक XAML बाध्य नियंत्रण चाहते हैं कार्यान्वित एक अंतरफलक के आधार पर अपने इनपुट को मान्य करने के ViewModel/Model में, ValidatesOnNotifyDataErrors के लिए इंटरफ़ेस INotifyDataErrorInfo और ValidatesOnDataErrors के लिए है I टी IDataErrorInfo है।
उदाहरण के लिए मान लीजिए कि आप इस तरह के एक दृश्य मॉडल हैं:

class PersonViewModel : IDataErrorInfo { 

    public string FirstName {get; set;} 

    string IDataErrorInfo.Error 
    { 
     return string.Empty; 
    } 

    string IDataErrorInfo.this[string columnName] { 
     if (columnName == "FirstName" &&) { 
      if (this.FirstName.Length > 20) 
       return "FirstName can't be more than 20 characters."; 

     } 
     return string.Empty; 
    } 

} 

और फिर अपने ध्यान में रखते हुए आप एक पाठ बॉक्स है कि इस तरह प्रथम नाम संपत्ति के लिए बाध्य है है: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} /> अब यदि उपयोगकर्ता 20 वर्ण में प्रवेश किया या टेक्स्टबॉक्स में अधिक एक त्रुटि का पता लगाया जाएगा।

दूसरी ओर NotifyOnValidationError का उपयोग तब किया जाता है जब आप बाध्यता विफल होने पर कोई ईवेंट उठाना चाहते हैं।

मैं आमतौर पर सत्यापन के लिए मेरी XAML नियंत्रण में ValidatesOnDataErrors का उपयोग करें और मैं के लिए अन्य दो एक की जरूरत नहीं किया है, तो यह अपनी स्थिति पर निर्भर करता है।

संपादित करें: मैं अपना जवाब अपडेट कर रहा हूं क्योंकि मैंने कुछ नई चीजें सीखी हैं, इसलिए मुझे इसे और अधिक प्रासंगिक बनाने की आवश्यकता है।

ValidatesOnDataErrors मोटी ग्राहकों में प्रयोग किया जाता है, या दूसरे शब्दों में जब इस तरह के एक मान्यता डेस्कटॉप WPF या WinForm आवेदन और मॉडल वस्तुओं के रूप में ग्राहक के पक्ष पर किया जाता है IDataErrorInfo लागू।

दूसरी ओर, ValidatesOnNotifyDataErrors थिन क्लाइंट (बहु स्तरीय अनुप्रयोग) के लिए एक बेहतर फिट होगा ऐसे क्लाइंट-सर्वर अनुप्रयोगों के रूप में (Silverlight, WCF के साथ WPF, आदि ..) जहां सत्यापन जगह लेता है सर्वर पर

इस तरह से जब एक पाठ बॉक्स में, उदाहरण के लिए, उपयोगकर्ता द्वारा कुछ, मूल्य एसिंक्रोनस रूप से सत्यापन के लिए सर्वर के लिए भेजा है, और जब सत्यापन के परिणाम वापस आ एक घटना उठाया है (घटना सटीक होना करने के लिए), तो इस मामले में निश्चित रूप से उपयुक्त विधि का उपयोग करके इसे उठाएं और प्रदर्शित करें, मॉडल INotifyDataErrorInfo लागू करेगा।

+1

नोट करने के लिए एक और बात ... कि INotifyDataErrorInfo .NET 4.5 में ही उपलब्ध है और आगे है ... और यदि आप Windows XP का समर्थन फंस रहे हैं (और इसलिए आप .NET 4.5 उपयोग नहीं कर सकते), तो आप अटक कर रहे हैं INotifyDataErrorInfo के बजाय IDataErrorInfo के साथ। – cplotts

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