2011-08-13 12 views
5

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

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

तो क्या यह मुख्य विचार में ग्राहक आईडी को स्टोर करने के लिए एक अच्छा अभ्यास है? यदि मैं ऐसा करता हूं, तो मेरे पास एक UserControl_Loaded ईवेंट कमांड से बंधे होना चाहिए, जहां मैं पता और बिलिंग जानकारी के लिए अनुरोध करता हूं।

या मैं मुख्य दृश्य की बजाय प्रत्येक उपयोगकर्ता नियंत्रण में बटन (पीछे और आगे बटन) स्थानांतरित कर सकता हूं, उस संदेश के साथ ग्राहक आईडी पास करें जो अगला दृश्य लोड करेगा।

कौन सा बेहतर है?

+0

चीजों को कम करने के लिए, आदेशों का उपयोग करने के बजाय 'ग्राहक चयन' संदेशों को प्रकाशित करने के लिए एमवीवीएम लाइट 'मैसेंजर' का उपयोग करने पर विचार करें। आपके अन्य नियंत्रण तब इस संदेश की सदस्यता ले सकते हैं। –

+0

इस पर मेरा अंतर्निहित विचार था, यदि स्रोत (वर्तमान दृश्य) के आधार पर बैक और फॉरवर्ड बटन मुख्य दृश्य में हैं, तो मुझे दृश्य मॉडल पर एक संदेश भेजने की आवश्यकता है। मैं इससे बचना चाहता था (वर्तमान दृश्य के आधार पर मुख्य दृश्य से एक संदेश भेजना)। तो मैं User_Control लोडेड घटना के बारे में सोच रहा था। – katie77

+0

आप एक संदेश भेजने से बचना क्यों चाहते हैं? –

उत्तर

4

एक तरह से मैंने अतीत में इस तरह की चीज की है एक ऐसा ऑपरेशन है जो ऑपरेशन के लिए डेटा संदर्भ को समाहित करता है। सभी पृष्ठों को इस वर्ग के गुणों (और अद्यतन) के साथ पॉप्युलेट किया जाएगा। मुख्य दृश्य मॉडल इस वर्ग का एक उदाहरण और पृष्ठ दृश्य मॉडल का संग्रह बनाता है, जो डेटा संदर्भ के साथ प्रत्येक प्रदान करता है। यह पृष्ठ से पृष्ठ पर नेविगेशन को भी संभालता है, CurrentPage, NavigateForwardCommand, और NavigateBackwardCommand गुणों को कार्यान्वित करता है।

यदि उपयोगकर्ता पृष्ठ 1 तक बैक अप करता है और ग्राहक आईडी बदलता है, तो डेटा संदर्भ नए ग्राहक के लिए उपयुक्त जानकारी के साथ दोहराया जाता है। चूंकि सभी पृष्ठ समान डेटा संदर्भ ऑब्जेक्ट को देख रहे हैं, इसलिए बाद के सभी पृष्ठ सही जानकारी प्रदर्शित करेंगे।

आपको डेटा संदर्भ ऑब्जेक्ट में संपत्ति-परिवर्तन अधिसूचना लागू करने की आवश्यकता होगी, और पृष्ठों में PropertyChanged को संभालना होगा। जब डेटा संदर्भ ऑब्जेक्ट में CustomerID संपत्ति बदलती है, तो पृष्ठ दृश्य मॉडल को उनके संबंधित विचारों में दिखाई देने वाली गुणों को ताज़ा करने की आवश्यकता होगी।

+0

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

+0

हाय, मैं यहां उलझन में हूं। क्षमा करें, अगर मैं बुनियादी प्रश्न पूछ रहा हूं। लेकिन एमवीवीएम लाइट में एक व्यू मॉडल लोकेटर है। हम उस वर्ग में दृश्य मॉडल का एक उदाहरण बनाते हैं। मैंने एक कक्षा बनाने की कोशिश की जिसमें सभी दृश्य मॉडल हैं और एक दृश्य मॉडल को इंस्टेंट करने का प्रयास किया। लेकिन यह काम नहीं किया – katie77

+0

मुझे लगता है कि जब आप इस ऑब्जेक्ट को तुरंत चालू करने का प्रयास करते हैं तो वास्तव में क्या हो रहा है, इसकी जांच करने की आवश्यकता होगी, और वर्णन करें कि, विशेष रूप से, आप अपेक्षा करते हुए काम नहीं कर रहे हैं। –