2011-02-03 13 views
19

मैं जो उस पर 2 उप दृश्य दिखाई देते हैं एक दृश्य है और एक ViewModel प्रत्येक दृश्य को सौंपा गया है:डब्ल्यूपीएफ एमवीवीएम: व्यू मॉडेल एक-दूसरे के साथ संवाद कैसे करते हैं?

ViewA - ViewModelA 
{ 
    ViewB - ViewModelB 
    ViewC - ViewModelC 
} 

ViewB एक पाठ बॉक्स है और ViewC एक combobox, जो दोनों के मैं ViewModelA से एक्सेस करने की आवश्यकता है। जीयूआई नियंत्रण स्वयं नहीं है, लेकिन बाध्य मूल्य यानी। टेक्स्टबॉक्स के आगे। और कॉम्बोबॉक्स का चयन किया गया। वर्तमान में मेरे पास ViewModelB और ViewModelC को ViewModelA पर गुणों के रूप में है लेकिन यह गलत लगता है।

एमवीवीएम पैटर्न को तोड़ने के बिना मॉडल को एक दूसरे के साथ संवाद करने के लिए मानक तरीका क्या है? मैं WPF/MVVM के लिए पूरी तरह से नया हूँ।

+2

* व्यूमोडेलबी में एक टेक्स्ट बॉक्स है और ViewModelC में एक combobox * है ... यदि मैं इसे सचमुच लेना चाहता हूं, तो आप पहले ही एमवीवीएम पैटर्न को तोड़ रहे हैं। ViewModels WPF नियंत्रणों का संदर्भ नहीं देते हैं, वे दृश्यों का पर्दाफाश करते हैं जो दृश्य * में * नियंत्रण की निर्भरता गुणों के लिए * बाध्य * हैं। वीएम उनसे जुड़े दृष्टिकोणों के लाभ के लिए गुणों का पर्दाफाश कर सकते हैं, लेकिन उन्हें उन दृश्यों की प्रकृति (या अस्तित्व) से अनजान रहना चाहिए। –

+1

जो मुझे लगता है कि व्यूबी के पास एक टेक्स्ट बॉक्स है और व्यूसी में कॉम्बो बॉक्स है, मैं इसे ठीक कर दूंगा। – Dev1

उत्तर

11

डिस्कनेक्ट करने का एक तरीका ViewModels एक-दूसरे से संवाद करता है, PRISM s EventAggregator जैसे प्रकाशन/सब्सक्राइब तंत्र का उपयोग करना है। हालांकि, माता-पिता/बच्चे व्यूमोडेल रिलेशनशिप में, मुझे लगता है कि माता-पिता के लिए बच्चे के व्यूमोडेल पर प्रत्यक्ष ज्ञान और नियंत्रण होना ठीक है।

व्यक्तिगत रूप से, मुझे नहीं लगता कि अन्य व्यू मॉडल्स से व्यूमोडेल लिखना एक बुरा अभ्यास है। मुझे हर व़क्त यह करना है। मेरे ViewModels में I generally favor composition over inheritance

+0

* मैं आम तौर पर अपने व्यू मॉडल्स * में विरासत पर संरचना का पक्ष लेता हूं - वे दो अलग-अलग चीजें हैं और एक वीएम दोनों का उपयोग कर सकता है। – slugster

+0

@ स्लगस्टर - हाँ, मैं दोनों का उपयोग करता हूं। उदाहरण: मैं अक्सर बेस व्यूमोडेल (INotifyPropertyChanged आदि ...) में कई बुनियादी ढांचे की चिंताओं को डालता हूं। –

+0

@slug मैं जानकारी के लिए कार्यक्षमता और संरचना के लिए विरासत कहूंगा। – LuckyLikey

3

व्यू मॉडेल आमतौर पर मॉडल से 'उत्तराधिकारी' रिश्तों को प्राप्त करता है। और जब यह समझ में आता है तो संबंध जोड़ना गलत नहीं है।

यह व्यूमोडेल के लिए एक और व्यूमोडेल का जिक्र करने वाली संपत्ति रखने के लिए बिल्कुल ठीक है।

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