2011-06-11 13 views

उत्तर

106

आप हमेशा बाँध का उपयोग करें कि क्या आप यह स्पष्ट हो या नहीं करता है, तो आप की जरूरत soring समूहीकरण और आदि की तरह अतिरिक्त सुविधाओं के प्रदान करता है।

मान लें कि हम

var collection = new ObservableCollection<string>(); 
var collectionView = CollectionViewSource.GetDefaultView(collection); 

है इस मामले में, collection करने के लिए या collectionView एक ही है के लिए बाध्य: बाध्यकारी इंजन डिफ़ॉल्ट संग्रह देखने के लिए बाध्य होगा अगर (जो संदर्भ collectionView के बराबर है) आप इसे collection से बांधने के लिए कहते हैं।

इसका मतलब है कि आपके प्रश्न का उत्तर "यह बिल्कुल कोई फर्क नहीं पड़ता" है।

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

हालांकि, एक और दिलचस्प और संबंधित प्रश्न है: क्या किसी को डिफ़ॉल्ट संग्रह दृश्य (यानी, स्वयं संग्रह के लिए बाध्य होना चाहिए, क्योंकि डिफ़ॉल्ट रूप से स्पष्ट रूप से बाध्य करने का कोई कारण नहीं है) या उसी संग्रह के दूसरे दृश्य में ?

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

+0

बहुत बढ़िया उत्तर। मेरी अपनी प्राथमिकता अब ऑब्जर्जेबल कोलेक्शन से जुड़ी है कि यह सिस्टम का चयन है। चयन और दृश्य के विपरीत मॉडल के बारे में कुछ और प्रतिनिधि "महसूस करता है", लेकिन कभी-कभी एमवीवीएम इस तरह से छेड़छाड़ कर रहा है। – Berryl

+0

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

+0

क्या यह यूनिवर्सल ऐप्स पर भी लागू/लागू है? –

3

यदि आप अपनी ग्रिड को दृश्य पर लागू सेटिंग्स को प्रदर्शित करना चाहते हैं, तो आप दृश्य से जुड़ जाएंगे। फ़िल्टरिंग, अन्यथा दृश्य अनावश्यक है।

27

ObservableCollection<T>INotifyCollectionChanged लागू करता है और संग्रह में आइटम बदल दिए जाने पर यूआई को सूचित करेगा।

ICollectionView अंतर्निहित संग्रह लागू होने पर INotifyCollectionChanged ईवेंट को प्रचारित करने के अतिरिक्त संग्रह को फ़िल्टर करने, क्रमबद्ध करने या समूह करने की क्षमता प्रदान करेगा।

किसी भी प्रकार से एमवीवीएम के साथ अच्छी तरह से काम करता है जब तक आप इसे बांधते हैं। जब आपको सॉर्टिंग, फ़िल्टरिंग या ग्रुपिंग की आवश्यकता होती है तो ICollectionView का उपयोग करें। जब आप नहीं करते हैं तो सीधे ObservableCollection<T> का उपयोग करें।

7

मुझे नहीं लगता कि इसे MVVM के साथ कुछ भी करना है। ICollectionView उन IColectionView का उपयोग अन्यथा बस, एक ICollectionView को ObservableCollection

9

जोन ने जो कहा उससे जुड़ने के लिए बस।मुख्य अंतर यह है कि CollectionViewSource.GetDefaultView(collection) का उपयोग करके, आप WPF पर आपको ViewModel पर निर्भर कर रहे हैं। कई एमवीवीएम purists इसे पसंद नहीं करते हैं और यह ObservableCollection केवल वैध विकल्प छोड़ देंगे।

अन्य विकल्प ICollectionView का उपयोग करना होगा और इसे लागू करने वाले वर्ग का उपयोग करना होगा, लेकिन यह WPF का हिस्सा नहीं है।

+1

हालांकि यह मुख्य अंतर नहीं है। डब्ल्यूपीएफ टैग नोट करें। "[अगर] बाध्य नियंत्रणों को वर्तमान आइटम, फ़िल्टर और कंपनी के अलग-अलग विचारों की आवश्यकता होती है, तो आप जो चाहते हैं वह उसी अंतर्निहित संग्रह के कई दृश्यों को स्पष्ट रूप से बांधना है"। वह अंतर है। एक "शुद्धवादी" होने के नाते, जो कुछ भी है, इसका मतलब है कि आप फ़िल्टर नहीं कर सकते हैं। जिमी हौट्स उत्तर देखें जो स्पष्ट भाषा में वास्तविक अंतर पर केंद्रित है। –

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