मैं सी #, डब्ल्यूपीएफ और एमवीवीएम पैटर्न में नया हूं। इस काफी लंबी पोस्ट के लिए खेद है, मैं समझने के अपने सभी बिंदुओं (या समझ में नहीं) सेट करने की कोशिश कर रहा हूं।कमांड और एमवीवीएम सिद्धांत - रिलेकॉमैंड्स
WPF और MVVM पैटर्न द्वारा प्रदान की गई कमांडिंग तंत्र पर बहुत से ग्रंथों का अध्ययन करने के बाद, मुझे इन चीजों का उपयोग करने के तरीके पर सीधे मेरे दिमाग में कुछ समस्याएं आ रही हैं।
मैं समझता हूं कि WPF के लिए दिए गए आदेश दृश्य वृक्ष के घटक में आयोजित कमांड तर्क के लिए एकाधिक "कॉलिंग पॉइंट" को परिभाषित करने की अनुमति देता है। जब एक कमांड कहा जाता है, तो कॉल दृश्य वृक्ष (कमांड लक्ष्य या केंद्रित तत्व से शुरू होता है) के माध्यम से कॉल करता है जब तक कि यह कमांडबिंग वाले तत्व में बाधा न हो जो कमांड तर्क कहां परिभाषित करता है।
इसके बारे में क्या अच्छा लगता है कि आप तर्क को निर्दिष्ट किए बिना सार्वजनिक आदेशों को परिभाषित कर सकते हैं और न ही कॉलिंग पॉइंट्स को पहले निर्दिष्ट कर सकते हैं।
मैं यह भी समझता हूं कि एमवीवीएम पैटर्न के बाद, व्यू के व्यूमोडेल को तर्क को संभालना चाहिए जबकि कमांड के बेस डब्ल्यूपीएफ इम्प्लेमेंटेशन केवल दृश्य तत्वों को इसे संभालने की अनुमति देता है क्योंकि कॉल दृश्य वृक्ष के माध्यम से बुलबुले करता है।
मैंने पाया कि जोश स्मिथ के रिले कॉमांड जैसे कस्टम कार्यान्वयन का उपयोग इस मामले में किया जा सकता है, क्योंकि आप अंतर्निहित व्यूमोडेल में रिलेकॉमांड ऑब्जेक्ट को दृश्य के एक तत्व (उदाहरण के लिए बटन) द्वारा बुलाए गए कमांड को बाध्य करते हैं।
लेकिन फिर, मैं नहीं देखता कि यह एक आदेश है (WPF कमांडिंग पैटर्न की परिभाषा द्वारा) अब हम व्यूमोडेल में संदर्भित एक कार्यान्वयन को सीधे निर्दिष्ट कर रहे हैं। इस विधि के साथ, हम यह जानने के बिना कहीं भी कमांड को कॉल करने में सक्षम होने के सभी फायदे खोले हैं कि तर्क कहां लागू किया गया है। इस मामले में, सीधे क्लिक ईवेंट हैंडलर का उपयोग क्यों न करें (उदाहरण के लिए)?
कोई मुझे बता सकता है कि मैं गलत कहां हूं? (उन लोगों के लिए धन्यवाद जो अंत में पोस्ट पढ़ते हैं!)
सम्मान। एनआर
शानदार उत्तर। मैं भी डब्ल्यूपीएफ सीखने के बीच में हूं और मुझे यह काफी मुश्किल लगता है। क्या आप इस बात पर टिप्पणी कर सकते हैं कि कोई अन्य विधि से बुलाए गए कमांड में निहित तर्क का उपयोग कैसे कर सकता है? मुझे लगता है कि इस मामले में आप उचित तर्क के साथ एक विधि लिखेंगे और इसे कमांड से भी कॉल करेंगे? आपके समय के लिए धन्यवाद। – MoonKnight
@ किलरकैम सामान्य रूप से, प्रत्येक "विधि" जिसे आप कॉल करना चाहते हैं, एक एकल 'आईसीओएमएंड' के भीतर encapsulated हो जाता है - आप एक 'आईसीओएमएंड' हो सकता है जो सिर्फ कई तरीकों को लिखता है, हालांकि (बस एक तरीका है जो कॉल> 1 विधि है)। –
आपके समय के लिए बहुत बहुत धन्यवाद। – MoonKnight