2010-04-12 6 views
8

मुझे पता है कि कई डब्ल्यूपीएफ एमवीवीएम ढांचे ने नेस्टेड उपयोगकर्ता नियंत्रणों का उपयोग कर पृष्ठों को लिखने के पक्ष में नेविगेशनविंडो और पेज नियंत्रणों का उपयोग करने से बचने के लिए प्रतीत होता है।मुझे किसी पृष्ठ के बजाय UserControl का उपयोग कब करना चाहिए?

NavigationWindow और पृष्ठ पीठ और पत्रिका में आगे नेविगेशन के साथ-साथ पृष्ठों के बीच डेटा पास करने के लिए एक आसान तरीका प्रदान करने को सक्षम करने के आसान तरीके प्रदान करते हैं। अधिकांश एमवीवीएम फ्रेमवर्क मैंने इन सुविधाओं को विभिन्न तरीकों से फिर से कार्यान्वित किया है।

क्या नेविगेशनविंडो और पेज का उपयोग करने से बचने का कोई विशिष्ट कारण है?

उत्तर

10

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

http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow.aspx

+2

अच्छी पकड़।तो शायद नेविगेशनविंडो और पेज क्लास एक सामान्य लाइन-बिजनेस एप्लिकेशन के लिए थोड़ा कम प्रासंगिक हैं। हालांकि यह अभी भी मुझे आश्चर्य है कि इतने सारे एमवीवीएम ढांचे पूरी तरह से उनसे बचते हैं। – dthrasher

1

ठीक है, तुम अब भी पुन: प्रयोज्य उप घटक बनाने के लिए usercontrols का उपयोग करने के लिए जा रहे हैं, लेकिन एप्लिकेशन वास्तुकला के लिए के रूप में, इसे नीचे वास्तव में मामले का उपयोग करने के लिए आता है। यदि आप एक ठेठ वेब एप्लिकेशन बना रहे हैं तो व्यवसाय/नेविगेशन ऐप ठीक होना चाहिए। यदि आप एक खेल लिख रहे हैं, तो इतना नहीं। इसी तरह यदि आप एक इंटरैक्टिव विज्ञापन या मीडिया प्लेयर की तरह कुछ कर रहे हैं।

2

मैं बस कुछ अन्य रोचक जानकारी पाया पॉल स्टोवेल की वेबसाइट पर डब्ल्यूपीएफ नेविगेशनविंडो और पेज से संबंधित।

वह इस NavigationWindow वर्ग के बारे में क्या कहना है:

WPF एक वर्ग, NavigationWindow कहा जाता है जो अनिवार्य रूप से एक विंडो जो भी एक फ्रेम के रूप में दोगुना हो जाता है, एक ही इंटरफेस के सबसे को लागू करने से है भी शामिल है। यह पहली बार उपयोगी लगता है, लेकिन अधिकांश समय आपको विंडो पर अधिक नियंत्रण की आवश्यकता होती है, इसलिए मुझे इस कक्षा का उपयोग करने की आवश्यकता नहीं है। मैं सिर्फ पूर्णता के लिए इसे इंगित कर रहा हूं, हालांकि आपका माइलेज भिन्न हो सकता है।

WPF Navigation पर अपने में गहराई से लेख और Magellan and WPF Page management issues वह का सामना करना पड़ा जब उसके मैगलन WPF ढांचे लेखन देखें।

3

मैं सिर्फ UserControls और पेज में एक और अंतर की खोज की: पेज DataTemplates के रूप में इस्तेमाल नहीं किया जा सकता।

उदाहरण के लिए, यदि आप MVVM शैली का उपयोग आवेदन निर्माण कर रहे थे, तो आप इस काम करने के लिए उम्मीद कर सकते हैं:

<DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}"> 
     <Views:ProjectDashboardView /> 
    </DataTemplate> 

लेकिन अगर ProjectDashboardView एक पृष्ठ है, यह असफल हो जायेगी।

+0

इस परिदृश्य में, आप चाहते हैं कि आपका पृष्ठ कन्स्ट्रक्टर में दृश्य मॉडल को स्वीकार करे या इसे अन्य डेटा से बनाये। आम तौर पर, एमवीवीएम कार्यान्वयन पेजफंक्शन का उपयोग करना चाहते हैं। अपने पृष्ठ के अंदर, आपके पास व्यू मॉडल वाला एक सामग्री प्रस्तुतकर्ता हो सकता है। पृष्ठ शीर्ष स्तर घटक है। इसे एक इनलाइन विंडो के रूप में सोचने का प्रयास करें। – Gusdor

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