2009-06-08 15 views
11

मैं जब ItemsControl का उपयोग कर DataTemplatesको ObservableCollections ViewModel पर के माध्यम से इसे बाध्यकारी द्वारा बुनियादी MVVM डिजाइन दृष्टिकोण समझने की कोशिश कर रहा हूँ।क्या मेरे व्यू मॉडेल में अवलोकन का दृश्य अवलोकन या दृश्य मॉडल होना चाहिए?

मुझे लगता है कि तार, दृश्य, और ViewModels की ObservableCollections करने के लिए बाध्य उदाहरण देखा है।

तार करने के लिए बाइंडिंग क़ौम के लिए ही हो रहा है, यह "ViewModels कि विचार है कि ViewModels के संग्रह शामिल के संग्रह में" WPF की शक्ति वास्तव में बाहर आने के लिए लगता है कि करने के लिए बाध्यकारी है।

एमवीवीएम पैटर्न में कुशल उपयोग के लिए, व्यूमोडेल में संग्रहों के लिए आइटम्स कंट्रोल, लिस्ट व्यू, लिस्टबॉक्स को बाध्य करने के लिए आपका मानक दृष्टिकोण क्या है? मैं इस तरह के अनुभव से सलाह के लिए देख रहा हूँ:

  • हमेशा ObservableCollection < का उपयोग करें ...> और कभी नहीं सूचीबद्ध करें < ...> क्योंकि ...
  • कुछ बेहतर ItemsControl प्रदर्शित करने के लिए की तुलना में एक संग्रह है ...
  • क्रम में अपने बजाय ViewModel कोड-पीछे, उपयोग में काम करने के लिए छानने पाने के लिए ...
  • दृश्य जब के उपयोग के संग्रह ... और ViewModels जब के संग्रह ...
  • 90% जब तक मैं एक आइटम नियंत्रण बना देता हूं और इसे ओ से बांधता हूं bservable दृश्यों का चयन जिसमें उनके स्वयं के व्यूमोडल हैं ...

उत्तर

10

मैं निम्नलिखित कारणों के लिए ViewModels का एक ObservableCollection का प्रयोग करेंगे:

  • ObservableCollection पहले से ही संकेत है जब यह संशोधित किया गया है के लिए उपलब्ध घटनाओं है (उदाहरण के लिए जब आइटम जोड़े गए/संग्रह से निकाल)।
  • हम व्यूमोडेल 'लेयर' पर हैं, इसलिए यह व्यूमोडेल में व्यूमोडेल का संग्रह दृश्य
  • के बजाय क्लीनर अलगाव प्रदान करता है यदि संग्रह में आइटमों से डेटा को संशोधित करना या डेटा प्राप्त करना आवश्यक है तो आप अधिक आसानी से कर सकते हैं आइटम को संशोधित/एक्सेस करें यदि आइटम ViewModels हैं (यदि वे विचार हैं तो आप अक्सर व्यू के डेटा कॉन्टेक्स्ट कास्टिंग करेंगे या इसके UI तत्वों तक पहुंचेंगे)।
+0

उपयोगी है, धन्यवाद –

+0

+1, यह निश्चित जाने का रास्ता है। अपने viewmodel ViewModels का संग्रह है और अपने दृश्य के संसाधन संग्रह उन ViewModels से प्रत्येक के लिए datatemplates है। –

1

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

+0

आप ViewModels (बजाय दृश्य का), तो होने कि आपके DataTemplate में XAML और एक दृश्य के .xaml फ़ाइल होने कि XAML के बीच अंतर क्या है की एक ObservableCollection है? –

1

मेरे पास एक ही प्रश्न है, लेकिन "मॉडल" के साथ "दृश्य" को प्रतिस्थापित करें। :)

मेरे पास अन्य मॉडल के संग्रह के साथ एक मॉडल है। मैं चाहता हूं कि मेरा व्यूमोडेल अन्य व्यूमोडेल का एक अवलोकन संग्रह हो, लेकिन एक बार जब मैं इसे तत्काल कर दूं - मॉडल संग्रह सामग्री के बीच कनेक्शन खो गया है। क्या अब मुझे मॉड्यूल संग्रह में व्यूमोडल्स अवलोकन योग्य संग्रह से सभी घटनाओं को तारों को शुरू करने की आवश्यकता है?

+1

हाँ, घटना के यह करने के लिए सबसे अच्छा तरीका है। सुरक्षा के लिए कमजोर घटना पैटर्न का उपयोग करने पर विचार करें। – Gusdor

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