2009-02-03 11 views
8

समस्या वक्तव्यमैं एमवीवीएम पैटर्न में मॉडल और व्यू-मॉडल के बीच समेकन कैसे बनाए रखूं?

मैं एक विन्यास फाइल की सामग्री को बदलने के लिए एक बहुत ही बुनियादी WPF आवेदन लिख रहा हूँ। डेटा प्रारूप एक स्कीमा के साथ एक एक्सएमएल फ़ाइल है। मैं MVVM के लिए एक सीखने परियोजना के रूप में उपयोग करना चाहते हैं, तो मैं विधिवत

  • मॉडल में कोड बांट दिया है: सी # वर्गों स्वत: जनरेट xsd.exe से

  • देखें मॉडल : मॉडल के दृश्य-अनुकूल प्रतिनिधित्व।

  • देखें: Xaml और

मैं समझता हूँ कि पीछे खाली कोड कैसे देखें-मॉडल एक हवा देखें बाध्यकारी बना सकते हैं। हालांकि, क्या यह व्यू-मॉडल < -> मॉडल अर्थशास्त्र बहुत अजीब नहीं छोड़ता है? Xsd.exe एकाधिक XML तत्वों के लिए सरणी के साथ सी # कक्षाएं उत्पन्न करता है। हालांकि, वी-वीएम स्तर पर आपको अवलोकन संग्रह की आवश्यकता है।

सवाल:

इस करता है वास्तव में मतलब है मैं दो पूरी तरह से अलग संग्रह जुटना में एक ही डेटा का प्रतिनिधित्व करने प्रकार रखने के लिए है?

मॉडल और व्यू-मॉडल के बीच तालमेल बनाए रखने के लिए सर्वोत्तम अभ्यास क्या हैं?

उत्तर

6

मैं एक बड़ा विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि यह मामला हाँ है। सामान्य विचार वास्तव में दृश्य और दृश्य के बीच परिवर्तन को प्रसारित करना है, और फिर व्यूमोडेल और मॉडल के बीच ईवेंट (मॉडल -> व्यूमोडेल दिशा) या निर्भरता (दूसरी दिशा में) के माध्यम से।

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

2

@ क्या इसका वास्तव में मतलब है कि मुझे दो अलग-अलग संग्रह प्रकारों को एक ही डेटा को समेकन में प्रस्तुत करना होगा?

मुझे लगता है हाँ। यह बहुत उबाऊ है, लेकिन यह काफी अच्छी तरह से काम करता है। उम्मीद है कि भविष्य में हमारे पास व्यूमोडेल भाग बनाने के लिए कोड जनरेटर भी होगा।

Karl उस पर काम कर रहा है: http://karlshifflett.wordpress.com/mvvm/

2

आप स्पष्ट रूप से viewmodel पर ObservableCollections की जरूरत है ताकि, हाँ, आप दो पूरी तरह से अलग संग्रह प्रकार मॉडल में और viewmodel में की आवश्यकता होगी।

मैंने एमवीवीएम में पूर्ववत/फिर से करने के बारे में एक लेख किया है जहां आप इसका एक संभावित समाधान पा सकते हैं। यह मिरर कोलेक्शन पर कॉल करता है: एक अवलोकन योग्य चयन प्राप्त वर्ग चुड़ैल स्वचालित रूप से सूची (मॉडल की सूची) से अपने आइटम प्राप्त करता है।

मुझे लगता है कि यह एक दिलचस्प समाधान है, आप यहाँ लेख

Part 1: Using the Viewmodel pattern to provide Undo/Redo in WPF

Part 2: Viewmodelling lists (यहाँ MirrorCollection परिभाषा है)

0

बेनकाब मॉडल में घटनाक्रम या प्रतिनिधियों और एक ही करने के लिए हुक पा सकते हैं व्यूमोडेल में, जब मॉडल में कभी भी मूल्य इवेंट या प्रतिनिधियों और व्यूमोडल के माध्यम से व्यूमोडेल को सूचित करते हैं तो आप यूआई अपडेट कर सकते हैं।

यदि आप इसे मॉडल मॉडल से मॉडल के रूप में सरल बनाना चाहते हैं तो बस कुछ विधि को कॉल करें नए मान

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