2009-12-20 11 views
7

ObservableCollectionINotifyCollectionChanged और INotifyPropertyChanged दोनों लागू करता है।पर्यवेक्षण चयन पर लागू किए गए INotifyProperty को लागू करने का उद्देश्य क्या है?

  • मैं समझता हूँ कि अतिरिक्त, विलोपन (+ स्पष्ट), और वस्तुओं के प्रतिस्थापन संग्रह की घटना CollectionChanged के माध्यम से उपभोक्ताओं को दर्ज करना पड़ा हुआ हैं, और मौजूदा आइटम में अपडेट हो सकता है कि आइटम 'ईवेंट PropertyChanged का उपयोग करके निगरानी की गई है यदि वे स्वयं INotifyPropertyChanged लागू करते हैं।

  • मैं दूसरों से पढ़ा है कि आप कर सकते हैं संग्रह के घटना PropertyChanged पर रजिस्टर क्योंकि यह केवल पढ़ने के लिए है नहीं।

तो अपने उद्देश्य क्या है, क्या उपयोग हम इसे के कर सकते हैं?

टिप्पणियां यहां और वहां पर चर्चा करने के लिए भ्रमित हो रही हैं कि ObservableCollection का जादू दोनों इंटरफेस को कार्यान्वित करना है, जो संग्रह और वस्तुओं दोनों सामग्री परिवर्तनों के लिए अधिसूचित होने की इजाजत देता है, जबकि यह सही नहीं है (इसे अनदेखा किया जाता है कई उदाहरण जहां संग्रह एक सूची बॉक्स से जुड़ा हुआ है जो वस्तुओं की सामग्री के बाद जादुई रूप से अद्यतन होता है, यह बताता है कि संग्रह सूची बॉक्स को सूचित करता है)।

असल में ऐसा लगता है कि संग्रह की एकमात्र श्रेष्ठता INotifyCollectionChanged लागू करना है। आइटम संपत्तियों के साथ लेनदेन ObservableCollection के साथ किसी अन्य संग्रह के मुकाबले आसान नहीं लगता है: यह केवल तभी संभव है जब आइटम INotifyPropertyChanged लागू करते हैं, जो वे नहीं कर सकते हैं, और यदि उपयोगकर्ता संग्रह से स्वतंत्र रूप से इस घटना पर हुक करने का प्रबंधन करता है।

क्या यह सही है?

उत्तर

1

बस एक अनुमान: तो संग्रह की गणना संपत्ति में परिवर्तनों के बारे में अधिसूचित किया जा सकता है?

3

डब्ल्यूपीएफ बाध्यकारी तंत्र बॉक्स के बाहर INotifyPropertyChanged (आईएनपीसी) का उपयोग कर सकते हैं।

आईएनपीसी नाम से पता चलता है कि डब्ल्यूपीएफ ऑब्जेक्ट गुणों में परिवर्तनों का पता लगाने की अनुमति देता है जो संग्रह का हिस्सा हो सकता है या नहीं।

अवलोकन योग्य चयन (ओसी) INOTifyCollectionChanged (InCC) लागू करता है, जहां आप कहते हैं कि संग्रह स्वयं आइटम संग्रह (जोड़ों को हटाने आदि) के अपडेट के WPF (और अपडेट को संभालने के लिए सुसज्जित किसी भी अन्य) को सूचित करता है। यदि ओसी में ऐसी वस्तुएं होती हैं जो स्वयं आईएनपीसी को लागू नहीं करती हैं तो डब्ल्यूपीएफ के पास यह जानने का कोई तरीका नहीं है कि प्रत्येक आइटम गुण कैसे बदल गए हैं।

अद्यतन

निम्नलिखित प्रश्न का जवाब देने में "हम बजाय सूचित किए जाने के लिए प्रत्येक नए आइटम पर पंजीकरण की संग्रह INPC घटना पर भरोसा कर सकते हैं?" जवाब न है। यदि प्रत्येक आइटम अपनी संपत्तियों पर आईएनपीसी लागू नहीं करता है तो डब्ल्यूपीएफ के पास यह जानने का कोई तरीका नहीं है कि प्रति आइटम आधार पर मूल्य क्या बदल गए हैं।

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

9

आप परावर्तक साथ ObservableCollection<T> स्रोत कोड को देखो, तो आप देख सकते हैं कि इस घटना के दो गुणों के लिए उठाया है:

this.OnPropertyChanged("Count"); 
this.OnPropertyChanged("Item[]"); 

ध्यान दें कि ObservableCollection<T> औजार INotifyPropertyChanged स्पष्ट रूप से है, तो आप केवल के माध्यम से PropertyChanged घटना का उपयोग कर सकते INotifyPropertyChanged परिवर्तनीय:

INotifyPropertyChanged inpc = myObservableCollection; 
inpc.PropertyChanged += myEventHandler; 
+0

जबकि वास्तव में सटीक और संक्षेप में मुझे यकीन नहीं है कि "इसका उद्देश्य क्या है?" क्यू – Andrew

+2

का हिस्सा उद्देश्य ग्राहकों को सूचित करना है कि संग्रह बदल गया है। उस पहलू में यह कलेक्शन चेंजेड इवेंट के समान उद्देश्य प्रदान करता है, लेकिन इनोटिफ़ाईप्रॉपर्टी चेंजेड इनोटिटीकॉलेक्शन चेंज –

+0

की तुलना में अधिक व्यापक रूप से समर्थित है जैसे कुछ संग्रह की गिनती से जुड़ा हुआ है .. – dan

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