2012-11-24 7 views
7

यदि टीएल; डीआर: अंतिम पैराग्राफ देखें।अलग-अलग विचार, कमांड प्रस्तुति (टेक्स्ट, आइकन) और कमांड लॉजिक (निष्पादित करें, CanExecute)

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

पहली समस्या (वास्तव में विचारों और तर्क को अलग करना) की तरह दिखता है DelegateCommand, RelayCommand और इस तरह के दृष्टिकोण से हल किया जाता है। कमांड लॉजिक को व्यूमोडल्स (या एमवीवीएमसी के मामले में नियंत्रक) में स्थानांतरित किया जाता है, कोड-बैक साफ़ है, CommandBindings और विचारों में अन्य बकवास नहीं है।

हालांकि, मुझे प्रस्तुति डुप्लिकेशन समस्या के लिए एक सामान्य रूप से स्वीकार्य समाधान नहीं मिल रहा है। मैं कमांड प्रस्तुति (टेक्स्ट, आइकन) और कमांड तर्क (Execute, CanExecute विधियों) को अलग करना चाहता हूं। सभी कोड जो मुझे मिल सकता है या तो कोड में प्रस्तुति डालता है (RoutedCommand को Label और Icon) जैसे अतिरिक्त गुणों के साथ, या प्रस्तुतिकरण में कोड डालता है (यानी, दृश्यों और कोड-पीछे में हैंडलर)। मुझे या तो पसंद नहीं है। मुझे लगता है कि प्रस्तुति पूरी तरह से एक्सएएमएल में होनी चाहिए, और कोड सीएस में पूरी तरह से होना चाहिए (या तो व्यूमोडेल या कंट्रोलर में)।

प्रश्न: दृश्य (XAML नियंत्रण के साथ जो संदर्भ आदेशों), आदेशों की प्रस्तुति (लेबल, हर आदेश के लिए माउस आदि) और तर्क आदेशों की (Execute के लिए सी # कोड, CanExecute आदि को अलग करने के लिए कैसे ViewModels में या नियंत्रक)?

+0

पहले से ही दो करीबी वोट? और शून्य टिप्पणियां? क्या सवाल अनावश्यक है या क्या मुझे कुछ याद आया? अगर आप बंद करने के लिए वोट देते हैं, तो कृपया कम से कम एक टिप्पणी छोड़ दें। अगर आप मुझे नहीं बताते कि मैंने क्या गलत किया है तो मैं नहीं सीख सकता। – Athari

+0

एफएक्यू पर "गैर रचनात्मक" विवरण पढ़ें - "यह प्रश्न बहस, तर्क, मतदान, या विस्तारित चर्चा की मांग करेगा"। उसी टोकन द्वारा, स्टैक ओवरफ़्लो यह पूछने के लिए एक अच्छी जगह नहीं है कि "मुझे अपना सॉफ़्टवेयर कैसे बनाना चाहिए?" प्रशन। –

+2

@ जेनहोमिनल जिस तरह से मैं इसे देखता हूं, मैंने नहीं पूछा है कि मेरे सॉफ़्टवेयर को कैसे बनाया जाए, मैंने एक समस्या के बारे में पूछा है जो मुझे लगता है * बहुत आम * है, इस पर विचार करते हुए कि मैंने कितना कोड देखा है जहां यह समस्या हल नहीं हुई है माइक्रोसॉफ्ट के कोड में भी। और वोटों के आधार पर निर्णय (20 विचारों से 5 +1 वोट), मैं अकेला नहीं हूं जो समाधान ढूंढना चाहता है। – Athari

उत्तर

4

इस समस्या का कोई अंतर्निहित समाधान नहीं है, आपको अपनी आस्तीन को रोल-अप करना होगा और आवश्यक संरचना स्वयं बनाना होगा।

हाल ही में एक परियोजना में मैंने काम किया, मैंने बिल्कुल यह किया। मैंने एक 'एक्शन' नामक एक अवधारणा बनाई जो अन्य दृश्य गुणों के साथ WPF ICommand को पूरक बनाता है। यह कुछ इस तरह था ...

interface IAction 
{ 
    ICommand Command { get; } 
    string DisplayText { get; } 
    string ToolTipText{ get; } 
    URI Icon { get; } 
} 

आवेदन Action उदाहरणों का एक संग्रह होता है। ये मेनू, टूलबार आदि से बंधे जा सकते हैं ... उसी Action उदाहरण को विभिन्न विभिन्न प्रस्तुति शैलियों के साथ पुन: उपयोग करने की अनुमति देता है। यह सब काफी सरल एमवीवीएम सामान है!

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