2010-09-14 18 views
5

मैं WPF एप्लिकेशन बनाने जा रहा हूं। अब तक यूनी में हमने जीयूआई को एकमात्र तरीका किया है, जिसमें एक बटन-बैक फ़ाइल है जिसमें बटन बटन को संभालने के लिए एक कोड है।विंडोज फॉर्म/डब्ल्यूपीएफ बहुत बड़ा है, मैं इसे कैसे विभाजित कर सकता हूं?

मेरा मुद्दा यह है कि जैसे ही एप्लिकेशन बढ़ता है, जीयूआई बढ़ता है, और फ़ाइल के पीछे कोड का आकार वास्तव में हाथ से बाहर हो सकता है!

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

बिंदु 15 अलग-अलग स्क्रीन के साथ है, मेरी कोड-बैक फ़ाइल बहुत बड़ी हो जाएगी (xaml फ़ाइल का उल्लेख न करें!): राज्यों के बीच जुगलिंग - 14 ढहने/छुपाएं और एक दृश्यमान बनाना, 15 के लिए नियंत्रणों को संभालना विभिन्न स्क्रीनें

क्या 15 अलग-अलग रूपों को रखने का कोई तरीका है, प्रत्येक एक कोड पर 15 टैबइटम के बजाय अपनी कोड-बैक फ़ाइल के साथ, और फिर एक मुख्य इंजन बनाने और उन्हें आवश्यकतानुसार स्क्रैप करने का कोई तरीका है? संभोग, ऐसा प्रतीत होना चाहिए कि यह एक रूप है, 15 पॉप अप नहीं।

मैं इससे कैसे निपटूं? आप xaml और कोड-बैक फ़ाइलों के मुद्दे से कैसे निपटेंगे जो हजारों लाइनें लंबी हैं?

उत्तर

5

आपका सहज ज्ञान अच्छा कर रहे हैं: आप नहीं एक विंडो में सब कुछ डाल करने के लिए चाहते हो । आप अपने स्वयं के एक्सएएमएल फ़ाइल में 15 "स्क्रीन" को प्रत्येक उपयोगकर्ता नियंत्रण या पृष्ठों के रूप में डालने से कहीं बेहतर होंगे।

यदि वेब-ब्राउज़र-शैली नेविगेशन आपके एप्लिकेशन के लिए समझ में आएगा, तो Page कक्षा देखें। यदि आप किसी पृष्ठ (विंडो के बजाए) इंगित करने के लिए अपने एप्लिकेशन के StartupUri सेट करते हैं, तो आपको स्वचालित रूप से बैक और फॉरवर्ड बटन वाली विंडो मिल जाएगी, और आप Hyperlink s का उपयोग कर सकते हैं (NavigateUri प्रॉपर्टी को किसी अन्य पृष्ठ पर इंगित करने के लिए सेट करें) या नए पृष्ठों पर नेविगेट करने के लिए NavigationService के तरीके।

यदि आप बैक और फॉरवर्ड बटन नहीं चाहते हैं, तो प्रत्येक "स्क्रीन" को अपने UserControl में रखें, और उन्हें दिखाने और छिपाने के लिए मुख्य विंडो में कुछ न्यूनतम तर्क जोड़ें। या यदि आप MVVM का उपयोग कर रहे हैं, तो आप कुछ जादू सेट कर सकते हैं जहां आप अपनी विंडो के DataContext (या बेहतर अभी तक, अपने एप्लिकेशन-स्तरीय व्यूमोडेल पर एक संपत्ति) को बदल सकते हैं और यह स्वचालित रूप से लोड होता है और सही UserControl दिखाता है (DataTemplate एस में देखें, या नीचे वीडियो देखें)।

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

चूंकि ऐसा लगता है कि आप एमवीवीएम पैटर्न से परिचित नहीं हैं, यह वीडियो आपके सिर पर जा सकता है, लेकिन मैं MIX2010 टॉक "Build Your Own MVVM Framework" की सिफारिश करने में मदद नहीं कर सकता। यह एमवीवीएम क्या कर सकता है पर एक आंख खोलने वाला है, और विभिन्न उपयोगकर्ता नियंत्रणों के बीच नेविगेशन को प्रबंधित करने के तरीके पर कुछ ठोस विचार हैं। (इसमें एक परिचय-से-एमवीवीएम टॉक का एक लिंक भी है।)

1

आप अपने MainWindow XAML में है कि UserControl के रूप में प्रत्येक स्क्रीन और संदर्भ बनाना चाहिए।

हालांकि, ऐसा लगता है जैसे आप अपने आवेदन में एक बहुत बड़ा डिजाइन दोष है, अर्थात यूआई में अपने तर्क हो रही है। कोड-बैक फ़ाइल आपके एप्लिकेशन या तर्क को चलाने के लिए नहीं है, यह आपके यूआई को ड्राइव करने के लिए है! आप इसे हल करने के लिए एमवीसी पैटर्न और निर्भरता इंजेक्शन में एक नज़र रखना चाहते हैं।

Wpf Application Framework उस के लिए एक शुरुआत होगी।

+0

+1 बेहतर पद्धति का सुझाव देने के लिए –

+0

कुछ हैंडलर सभी तर्कों के लिए ज़िम्मेदार होंगे, या एक डीएल संदर्भ में होंगे .. मैंने सोचा कि यह होगा मैं विश्लेषण के साथ आया उपयोग मामलों द्वारा गुई को विभाजित करने के लिए अच्छा/सुसंगत रहें। – Mikey

+0

पी। UserControl पर बीमार देखो और आपको बताएं, धन्यवाद !! – Mikey

-1

कोड-पीछे फ़ाइलों के संदर्भ में, आप, आप पतन और अलग अलग स्क्रीन विस्तार करने के लिए ... हालांकि अनुमति देने के लिए #region टैग का उपयोग कर सकता है इसे बाहर बंटवारे तार्किक यदि संभव हो तो एक बेहतर तरीका है में

+1

मुझे इससे पहले सामना करना पड़ा है और यह हमेशा मुझे गलीचा गंदगी के नीचे गंदगी के समान हमला करता है। –

+0

मैं असहमत हूं, यह आपके कोड को तर्कसंगत रूप से सॉर्ट करने में आपकी सहायता करता है - समूह को अपने ईवेंट हैंडलर, आपकी प्रॉपर्टी इत्यादि। –

+0

कक्षाएं उपयोगी होती हैं जब कक्षा पर्याप्त रूप से बड़ी हो जाती है, लेकिन यदि यह पर्याप्त है कि क्षेत्र अनिवार्य हैं, तो इसका शायद अर्थ है कि कक्षा है refactoring की जरूरत में। जिस मामले में मैंने सामना किया है वह वह जगह है जहां आप एक फ़ाइल खोलते हैं और ऐसा लगता है कि यह दो स्क्रीन पर फिट बैठता है। फिर आप कुछ क्षेत्रों का विस्तार करते हैं; ठीक है, अब यह शायद एक दर्जन है। ओह, लेकिन रुको, उन क्षेत्रों के भीतर क्षेत्र थे; वास्तव में, उन 'दो' स्क्रीनों में हजारों लाइनें थीं। एक ही कक्षा में इस कोड ने तंग युग्मन के लिए कई अवसर पैदा किए और अब अलगाव में किसी एक टुकड़े का परीक्षण करना मुश्किल है। X12l के मामले में –

-2

आप कर सकते थे अपनी कक्षा partial बनाएं और इसे अलग फ़ाइलों में विभाजित करें।

+0

'आंशिक' वास्तव में [लागू] नहीं है (http://stackoverflow.com/q/17250559/1997232) और Winforms के मामले में यह एक खराब सुझाव है क्योंकि आपको सभी सदस्यों की देखभाल करना होगा (उदाहरण के लिए फ़ील्ड नाम) एक दूसरे के साथ हस्तक्षेप नहीं करना (encapsulation की कमी)। – Sinatr

6

यदि आप WPF का उपयोग शुरू करने वाले हैं तो आपको निश्चित रूप से MVVM डिज़ाइन पैटर्न और commanding पर एक नज़र रखना चाहिए। आपको आईओसी कंटेनर के माध्यम से निर्भरता इंजेक्शन का उपयोग करने पर भी विचार करना चाहिए, यह सेट करना बहुत आसान है, यह एक महान tutorial है।

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

0

WPF कम्पोजिट आवेदन गाइडेंस (या प्रिज्म) यूआई छोटे वर्गों के लिए टूट संभाल करने UI Composition की अवधारणा का उपयोग करता है।

http://compositewpf.codeplex.com/

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