2010-07-07 9 views
7

एक डब्ल्यूपीएफ/एमवीवीएम अनुप्रयोग में, मैं किसी भी लंबे ऑपरेशन से पहले मुख्य दृश्य कर्सर को Cursors.Wait पर सेट करने के लिए कोड-सक्षम तरीका खोजने की कोशिश कर रहा हूं और इसे पूरा करने के बाद इसे डिफ़ॉल्ट कर्सर में पुनर्स्थापित करने का प्रयास कर रहा हूं।दृश्य के भीतर रूटेड कॉमांड के निष्पादन को कैसे रोकें? (डब्ल्यूपीएफ/एमवीवीएम)

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

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

कोई सलाह कृपया?

धन्यवाद,

टिम

+0

वहाँ बहुत अच्छा कारण हो सकता है कि आप ऐसा करना चाहते हैं, जो कुछ हद तक जटिल लगता है, लेकिन क्या कोई कारण है कि आप अपने व्यूमोडेल में केवल वर्तमान कर्सर संपत्ति नहीं बना सकते हैं, और कर्सर को उस दृश्य में अपने व्यू में बाध्य कर सकते हैं? –

+1

@Wonko। धन्यवाद - यह एक अच्छा सवाल है और मैं मानता हूं कि यह सबसे अधिक एमवीवीएम-अनुरूप दृष्टिकोण की तरह लगता है। हालांकि, इसका मतलब है कि मुझे कई व्यूमोडेल विधियों में एक ही 2-लाइन कोड परिवर्तन लागू करना होगा, जबकि मैं कर्सर प्रबंधन कोड को केंद्रीकृत करने की उम्मीद कर रहा था। दूसरी जटिलता यह है कि मेरे व्यू में कुछ नियंत्रण शामिल हैं जो रूटेड कमांड स्वीकार करते हैं। मैं अपने परिचालनों में एक ही तर्क कैसे लागू करूं, क्योंकि वे व्यूमोडेल का हिस्सा नहीं हैं? –

उत्तर

3

आप एक स्थिर तरीके से कर्सर सेट कर सकते हैं। प्रभाव यह है कि कर्सर 'प्रतीक्षा' होगा जबकि ऐप पर एक निश्चित नियंत्रण से अधिक होने पर ध्यान केंद्रित किया जाएगा।

कोड है, जो लंबा आपरेशन के शुरू में ViewModel का हिस्सा होगा:

Mouse.OverrideCursor = Cursors.Wait; 

ऑपरेशन के बाद पूरा हो गया है आप इस तरह ओवरराइड खाली करने के लिए है:

Move.OverrideCursor = null; 
+0

मुझे कुछ नया और उपयोगी सिखाए जाने के लिए आपके विचार और +1 के लिए धन्यवाद, लेकिन यह अभी भी उन मुद्दों को हल नहीं करता है जिन्हें मैंने अपनी टिप्पणी में @Wonko में उठाया था। –

+0

आईसीओएमएंड के अपने कार्यान्वयन को बनाने का एक विकल्प यहां है। एक लोकप्रिय व्यक्ति को रिलेकॉमैंड कहा जाता है, जो मुझे यकीन है कि आप कहीं भी ऑनलाइन लागू कर सकते हैं। यदि आप इसे अपने आदेशों के लिए उपयोग करते हैं तो आप आधार-प्रकार के 'execute' हैंडलिंग में इस कर्सर हैंडलिंग को दूर कर सकते हैं। मेरे ज्ञान के लिए सभी रूटेड कमांड को विश्व स्तर पर अवरुद्ध करने का कोई तरीका नहीं है। केवल नकारात्मक पक्ष यह होगा कि आपके आदेश अब 'रूटेड' नहीं हैं। इसके बजाय उन्हें व्यूमोडेल पर धकेल दिया जाता है। उम्मीद है कि मदद करता है। – Steven

+0

फिर से धन्यवाद स्टीवन। यह वही चीज है जिसे मैं हासिल करने की कोशिश कर रहा हूं हालांकि मुझे लगता है कि मुझे इस बारे में सोचना होगा कि क्या मैं आदेशों के बिना जी सकता हूं। मैं यह देखने के लिए संघर्ष कर रहा हूं कि अंतर्निहित कमांड के मामले में यह कैसे काम करेगा जो नियंत्रण नियंत्रण (उदाहरण के लिए टॉगलबॉल्ड कमांड जो RichTextBox को लक्षित करता है)। क्या इस परिदृश्य को रिलेकॉमैंड के साथ काम करने का कोई तरीका है? –

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