2012-10-26 14 views
6

एक एमवीवीएम डिज़ाइन में, अगर दृश्य व्यूमोडेल बनाता है, तो ViewModel को इसके मॉडल के बारे में कैसे पता होना चाहिए?मॉडल को व्यूमोडेल में कैसे पारित किया जाना चाहिए?

मैंने कुछ स्थानों से पढ़ा है कि मॉडल को इसके निर्माता के माध्यम से व्यूमोडेल में पारित किया जा सकता है। तो यह तरह दिखता है:

class ViewModel { 
    private Model _model; 
    public ViewModel(Model model) { 
     _model = model; 
    } 
} 

के बाद से देखें ViewModel पैदा कर रही है, और ViewModel के निर्माता में मॉडल पारित करने के लिए, फिर देखें मॉडल के बारे में पता है। लेकिन अधिकांश एमवीवीएम डिज़ाइनों से देखे गए यूएमएल आरेखों से, दृश्य मॉडल के बारे में कुछ भी नहीं जानता है।

मॉडल को व्यूमोडेल में कैसे पारित किया जाना चाहिए?

उत्तर

2

आप लगभग सही रास्ते पर हैं, आप बस जानकारी का एक महत्वपूर्ण टुकड़ा खो रहे हैं।

हां, एक मॉडल को कन्स्ट्रक्टर पर व्यूमोडेल में पास किया जा सकता है - इसे निर्भरता इंजेक्शन के रूप में जाना जाता है, या वैकल्पिक रूप से Inversion of Control (आईओसी) के रूप में जाना जाता है।

यह प्राप्त करने का सबसे आसान तरीका है UnityContainer का उपयोग Prism से करना है। आपके आवेदन के स्टार्टअप के आस-पास कहीं भी आप एकता कंटेनर के साथ इंटरफेस और उनके संबंधित कार्यान्वयन प्रकार को पंजीकृत करते हैं, तब से आप उस उदाहरण से जुड़े प्रकार का भौतिक उदाहरण प्राप्त करने के लिए यूनिटी कंटेनर पर Resolve<MyInterface>() पर कॉल करते हैं।

जहां एकता वास्तव में आपकी मदद करेगी यह है कि यह स्वचालित रूप से कई रचनाकार मानकों को हल कर देगा क्योंकि संभवतः जब आप इसे किसी प्रकार को हल करने के लिए कह सकते हैं। तो अपने viewmodel पर अपने निर्माता इस तरह दिखता है:

public class MyViewModel : IMyViewModel 
{ 
    public MyViewModel(IUnityContainer container, IMyModel model) 
    { 
     _container = container; 
     _model = model; 
     ...etc... 
    } 
} 

हैं और आपका दृश्य करता है:

this.DataContext = container.Resolve<IMyViewModel>(); 

एकता कंटेनर होगा तो MyViewModel वर्ग का एक उदाहरण ऊपर नई, के रूप में यह यह है कि करता है IMyModel से जुड़े वर्ग के एक उदाहरण को हल और नया भी करेगा।

+0

धन्यवाद! मैं प्रिज्म और यूनिटीकंटनर का उपयोग नहीं कर रहा हूं। आपने जो उल्लेख किया है, उससे ऐसा लगता है कि व्यू मॉडेल के कन्स्ट्रक्टर में मॉडल के लिए इंटरफ़ेस का उपयोग करना है। लेकिन इस मामले में, ViewModel मॉडल के अंदर विधियों और डेटा के बारे में कैसे पता चलेगा? मॉडल का इंटरफ़ेस एक सामान्य 'एक' IModel 'जैसा होगा जो सभी मॉडल लागू करता है, या प्रत्येक मॉडल के लिए एक अलग इंटरफ़ेस होगा, जैसे कि' माईफर्स्टमोडेल 'के लिए,' माईसेकॉन्डमोडेल 'के लिए' आईमी फर्स्टमोडेल 'है, वहां 'IMyFSecondModel है 'और इतने पर? – Carven

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