2009-06-21 11 views
6

दिखाते हैं मुझे RelayCommand का एमवीवीएम विचार पसंद है जो व्यूमोडेल द्वारा खुलासा किया गया है। यह अच्छा और सुरुचिपूर्ण है, संचालन के लिए जो आगे उपयोगकर्ता इनपुट के साथ किया जा सकता है। सरल। परीक्षण योग्य।एमवीवीएम और कमांड जो अधिक GUI

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

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

उत्तर

4

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

मैंने हाल ही में इसे blog post with a bit of a different topic में एक उदाहरण के रूप में उपयोग किया है।

1

इस तरह की चीजें (पुष्टिकरण संवाद, फ़ाइल खुले संवाद इत्यादि) आमतौर पर अनुप्रयोगों के बीच साझा की जाती हैं। तो मेरी प्राथमिकता उन्हें व्यूमोडेल में बिल्कुल नहीं रखती है।

व्यूमोडेल ऐप-विशिष्ट है, और व्यूमोडेलबेस को अनिश्चित काल तक विस्तारित करना एक अच्छा विचार नहीं है। इसके बजाय, दृश्य को विस्तारित करने के लिए पुनः उपयोग करने योग्य व्यवहार बनाएं। वहाँ Expression Blend Gallery

संपादित करें पर quete कुछ व्यवहार नमूने हैं:

व्यवहार गुण होते हैं सकता है और आप न केवल व्यवहार विशेषताओं निर्दिष्ट करने के लिए, लेकिन यह भी कुछ प्रतिक्रिया पाने के लिए इन गुणों का उपयोग कर सकते हैं:

<Button Content="Open Document"> 
    <i:Interaction.Behaviors> 
     <local:FileOpenBehavior 
      FileNameTarget="{Binding ElementName=tbDocName}"/> 
    </i:Interaction.Behaviors> 
</Button> 

उपरोक्त उदाहरण में, tbDocName छुपाया जा सकता है - या आप अपने मॉडल व्यू की एक संपत्ति से जुड़ सकते हैं।

+0

"एक खुला संवाद दिखाएं" भाग पुन: प्रयोज्य हो सकता है; लेकिन फिर आपको उस फ़ाइल के साथ कुछ करने की ज़रूरत है, और यह एप्लिकेशन-विशिष्ट होने जा रहा है, इसलिए मुझे यकीन नहीं है कि मैं देखता हूं कि यह कैसे काम करता है। क्या आप इसका उदाहरण दे सकते हैं कि आप व्यवहार के साथ ऐसा कैसे करेंगे? –

+0

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

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