2009-06-19 8 views
7

एमवीवीएम में, प्रत्येक व्यू में व्यूमोडेल होता है। एक दृश्य मैं विंडो, पेज या उपयोगकर्ता नियंत्रण समझने के लिए समझता हूं जिसमें आप व्यूमोडेल संलग्न कर सकते हैं जिससे दृश्य को डेटा प्राप्त होता है।एमवीवीएम में डेटा टेम्पलेट्स को विचार माना जाता है जैसे UserControls दृश्य हैं?

लेकिन डेटा टेम्पलेट व्यूमोडेल का डेटा भी प्रस्तुत कर सकता है।

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

यूआई पर व्यूमोडेल के डेटा को प्रस्तुत करने की बात आने पर डेटा टेम्पलेट विंडोज/पेज/उपयोगकर्ता नियंत्रण से अलग कैसे हैं? और क्या इन चारों के अलावा अन्य प्रकार के "दृश्य" हैं?

उत्तर

7

जिस तरह से मैं इसका उपयोग करता हूं, डेटा टेम्पलेट वास्तव में व्यूमोडेल को दृश्य को जोड़ने का तरीका है। आमतौर पर MVVM में मेरी DataTemplates कि तरह लग रहे:

<DataTemplate DataType="{x:Type vm:FooViewModel}"> 
    <v:FooView /> 
</DataTemplate> 
+0

दिलचस्प है, लेकिन फिर आपके एक्सएएमएल के शेष कैसे दिखते हैं? मैंने इसका एक छोटा सा उदाहरण आज़माया, इसे संकलित किया और विजुअल स्टूडियो ने कहा कि इसे प्रशासक अनुमतियों (Vista), विषम की आवश्यकता है। देखना चाहते हैं कि आप इस प्रोजेक्ट में इस पैटर्न का उपयोग कैसे करते हैं। –

+0

असल में, मैंने ऐप.एक्सएएमएल या मुख्य विंडो के एक्सएएमएल में "मैपिंग" डेटामैप्लेट लगाए हैं, और बाकी सब कुछ UserControls है ... –

+0

क्या आप ViewModel में खींचने के लिए ContentControl का उपयोग कर रहे हैं, तो मैं इस को आपके जैसे डेटा टेम्पलेट के साथ कोशिश कर रहा हूं जो यह " लेकिन यह उन्हें लिंक नहीं करता है, यह कुछ भी प्रदर्शित नहीं करता है। –

0

मैं viewmodel करने के लिए बाध्य करने के लिए दृश्य एक DataTemplate उपयोग करने की अनुशंसा नहीं होता। मुझे वर्तमान में इस दृष्टिकोण का उपयोग करके प्रदर्शन समस्याएं आ रही हैं क्योंकि दृश्य हर बार ध्यान केंद्रित होने पर रीफ्रेश किया जाता है। जैसा कि आप देख सकते हैं here और here

दुर्भाग्यवश मुझे अभी तक एक बेहतर विकल्प नहीं मिला है।

1

क्या MVVM में संक्रमण में इस बिंदु पर मेरे लिए सबसे अधिक उपयुक्त बना रही है है:

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

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

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

इस तरह मैं इसे समझता हूं, लेकिन सीमाएं बहुत अस्पष्ट हैं। मुझे एप्रेस बुक प्रो एक्सप्रेशन ब्लेंड 4 एंड्रयू ट्रॉल्सन द्वारा पसंद है। हालांकि, वह वास्तव में कोई भी डेटा-भारी उदाहरण नहीं देता है।