मैं डब्ल्यूपीएफ में एमवीपी/एम-वी-वीएम लागू कर रहा हूं और मुझे अब तक इसके साथ शुभकामनाएं मिल रही हैं। हालांकि, मुझे नहीं लगता कि यह मॉडल मॉडल संवाद बॉक्स को कार्यान्वित करने का समर्थन करता है। मैंने यह काम सीखने के लिए क्रैक.NET (http://www.codeplex.com/cracknetproject) से अपना काम लिया है।मॉडल-व्यू-प्रस्तुतकर्ता और मॉडल संवाद बॉक्स .... कैसे करें?
मेरे पास एक शैल व्यू व्यू (जो सिर्फ एक्सएएमएल है) जिसमें इसका मेनू है। मेन्यू शेलमोडेल व्यू में एक कमांड से जुड़ा हुआ है जो "एडिट प्रेफरेंस" कहता है।
शैलमोडेल व्यू संपादनप्रणाली के लिए आईसीओएमएंड लागू करता है और यहां हम उपयोगकर्ता को एप्लिकेशन के लिए वरीयताओं को संपादित करने के लिए एक संवाद बॉक्स रखना चाहते हैं।
यहां कई समस्याएं: 1. शैलमोडेल व्यू में शैल व्यू का संदर्भ सही ढंग से संवाद करने के लिए नहीं है। ShellModelView ShellView का DataContext है, लेकिन मुझे सेटअप की बैकरेफर दिखाई नहीं दे रही है। 2. ShellModelView को वैसे भी स्पष्ट यूआई लोड नहीं किया जाना चाहिए। तो यहां उचित इंटरैक्शन मॉडल क्या है? 3. मैं अपनी प्राथमिकताएं डायलॉग कैसे बना सकता हूं ताकि यह तर्क और दृश्य के बीच ठीक से अलग हो सके? PreferencesDialog को खुद को एक विंडो होने की आवश्यकता है ताकि आप उस पर ShowDialog को कॉल कर सकें, लेकिन इसका मतलब है कि आपको इसे तुरंत चालू करने के लिए विंडो (उदा। देखें) के संदर्भ की आवश्यकता है। आदर्श रूप से मैं दृश्य को तत्काल किए बिना प्राथमिकता डायलॉग के भीतर कोड/सत्यापन का परीक्षण करने में सक्षम होना चाहिए (शायद एक मॉक व्यू का उपयोग कर?)।
दिखाने मैंने सोचा था कि MVVM के लक्ष्यों में से एक नहीं होने ViewModel दृश्य के बारे में एक बात पता प्राप्त करने के लिए है (या आपके उदाहरण में संवाद)? ताकि किसी भी समय व्यूमोडेल का उपयोग करने वाले किसी भी दृश्य (या कोई भी) हो। एक व्यू इंटरफेस पर अपनी ViewModel सेट चीजों को रखने से थोड़े टूट जाते हैं। –
ऐसा इसलिए नहीं है क्योंकि इंटरफ़ेस संवाद के कार्यान्वयन से कमांड को इन्सुलेट करता है। –
वह एमवीपी पैटर्न है। आपके सुझाए गए व्यू इंटरफ़ेस को बदलना ViewModel को तोड़ देगा, उदा। किसी विधि या किसी प्रॉपर्टी के प्रकार के हस्ताक्षर को बदलें, बीएएम आपने अभी अपना व्यूमोडेल तोड़ दिया है जिस पर इंटरफ़ेस पर निर्भरता है। एमवीवीएम में, दृश्य बाइंडिंग के माध्यम से व्यूमोडेल 'देखता है'। दृश्य में परिवर्तन करना (उदा। नियंत्रण जोड़ना) को इंटरफेस बदलने या यहां तक कि व्यूमोडेल को फिर से सम्मिलित करने की आवश्यकता नहीं होगी। कूल चीज है, कई दृश्यों द्वारा एक एकल व्यू मॉडेल 'मनाया जा सकता है'। जीओएफ पुस्तक में ऑब्जर्वर पैटर्न देखें और प्रिज्म डॉक्स सेक्शन 'प्रेजेंटेशन मॉडल' पढ़ें यदि आप इसमें अधिक दिलचस्पी रखते हैं :) –