चाहिए एक बाँध DataGrid
के लिए
ICollectionView = CollectionViewSource.GetDefaultView(collection)
या करने के लिए
ObservableCollection<T> collection;
???
MVVM के लिए सबसे अच्छा अभ्यास क्या है और क्यों?
चाहिए एक बाँध DataGrid
के लिए
ICollectionView = CollectionViewSource.GetDefaultView(collection)
या करने के लिए
ObservableCollection<T> collection;
???
MVVM के लिए सबसे अच्छा अभ्यास क्या है और क्यों?
जवाबों:
आप हमेशा एक को बांधते हैं ICollectionView
, चाहे आप इसे स्पष्ट करें या नहीं।
माना कि हमारे पास है
var collection = new ObservableCollection<string>();
var collectionView = CollectionViewSource.GetDefaultView(collection);
इस मामले में, के लिए बाध्य collection
या करने के लिए collectionView
एक और एक ही है: बाध्यकारी इंजन डिफ़ॉल्ट संग्रह देखने के लिए बाध्य होगा (जो संदर्भ है के बराबर collectionView
) यदि आप करने के लिए बाध्य करने के लिए कह collection
।
इसका मतलब है कि आपके प्रश्न का उत्तर "यह बिल्कुल कोई फर्क नहीं पड़ता है"।
बस पूरी तरह से स्पष्ट होने के लिए: यहां तक कि अगर आप सीधे संग्रह में बांधते हैं, तो बाइंडिंग इंजन डिफ़ॉल्ट दृश्य से बंध जाएगा। दृश्य के संशोधित गुण जैसे कि सॉर्ट मानदंड उस बाइंडिंग को प्रभावित करते हैं जो सीधे संग्रह में बाँधने के लिए प्रकट होती है, क्योंकि कवर के पीछे यह डिफ़ॉल्ट दृश्य के लिए एक बाध्यकारी है।
हालांकि, एक और दिलचस्प और संबंधित सवाल है: क्या एक व्यक्ति को डिफ़ॉल्ट संग्रह दृश्य (यानी, स्वयं संग्रह करने के लिए बाध्य करना चाहिए, क्योंकि स्पष्ट रूप से डिफ़ॉल्ट दृश्य से बाइंड करने का कोई कारण नहीं है) या उसी संग्रह के किसी अन्य दृश्य के लिए?
यह देखते हुए कि प्रत्येक दृश्य की वर्तमान आइटम, सॉर्ट मानदंड आदि की अपनी धारणा है, यह इस प्रकार है कि यदि आप एक ही संग्रह में कई बाइंडिंग करने का इरादा रखते हैं, और बाध्य नियंत्रणों को वर्तमान आइटम, फ़िल्टर और कंपनी की अलग-अलग धारणाओं की आवश्यकता है, तो आप जो चाहते हैं, वही अंतर्निहित संग्रह के कई विचारों को स्पष्ट रूप से बांधना है।
ObservableCollection<T>
INotifyCollectionChanged
जब संग्रह में आइटम बदले गए हैं, तो UI लागू करेगा और उसे सूचित करेगा।
ICollectionView
INotifyCollectionChanged
यदि आप अंतर्निहित घटनाओं को लागू करते हैं, तो घटनाओं को प्रचारित करने के अलावा संग्रह को फ़िल्टर, सॉर्ट या समूह करने की क्षमता देंगे ।
जब तक आप इसे बांधते हैं, तब तक MVVM के साथ या तो प्रकार अच्छा काम करता है। ICollectionView
जब आपको छांटने, छानने या समूह बनाने की आवश्यकता हो तब उपयोग करें । ObservableCollection<T>
जब आप सीधे उपयोग न करें।
जॉन ने जो कहा, उसे जोड़ने के लिए। मुख्य अंतर यह है कि, उपयोग करके CollectionViewSource.GetDefaultView(collection)
, आप आपको WPF पर निर्भर ViewModel बना रहे हैं। कई MVVM शुद्धतावादियों को यह पसंद नहीं है और यह ऑब्जर्वेबल कॉलेक्शन को केवल वैध विकल्प छोड़ देगा।
अन्य विकल्प ICollectionView
एक वर्ग का उपयोग और उपयोग करना होगा , जो इसे लागू करेगा, लेकिन स्वयं WPF का हिस्सा नहीं है।
यदि आप अपने ग्रिड को देखने के लिए लागू की गई सेटिंग्स को प्रदर्शित करना चाहते हैं, जैसे फ़िल्टर करना, तो आप दृश्य से बाध्य होंगे, अन्यथा दृश्य निरर्थक है।