2011-06-21 9 views
17

Icommand में CanExecuteChanged घटना दो विधियों और एक ईवेंट शामिल है।आईसीओएमएंड

क्या दो तरीकों कर स्पष्ट है, लेकिन मैं नहीं समझ सकता क्या घटना कि ICommand में प्रदान की जाती है करता है।

CanExecuteChanged ईवेंट कब उठाया गया है?

नीचे स्पष्टीकरण MSDN पर है लेकिन मैं इसे समझ नहीं सकता।

CanExecuteChanged उठाया है आदेश प्रबंधक कि कमांडिंग संचालन केंद्रीकृत कि एक आदेश है कि उठाया गया अमान्य हो आदेश स्रोत में एक परिवर्तन का पता लगाता है, लेकिन आदेश बाध्यकारी द्वारा अभी तक नहीं निष्पादित करता है, तो ।

क्या आप इसे सरल शब्दों में समझा सकते हैं?

धन्यवाद ......

उत्तर

7

CanExecuteChanged उठाया है, CanExecuteChanged घटना भी उठाया जाता है, तो CanExecute मापदंडों एक PropertyChanged ईवेंट उत्पन्न। उदाहरण के लिए, एमवीवीएम लाइट टूलकिट का RelayCommandCanExecuteChanged ईवेंट बढ़ाता है यदि CanExecute पैरामीटर PropertyChanged ईवेंट बढ़ाते हैं, जबकि प्रिज्म का DelegateCommand नहीं है।

+0

रन टाइम पर 'CanExecute' विधि को बदलने के लिए कैसे संभव है? क्या आप कृपया विस्तृत कर सकते हैं .... – Pritesh

+0

@ प्राइतेश, एक अनुमान –

+0

@ विंगरसेन्डन का उपयोग करें, मुझे लगता है कि ऑब्जेक्ट की भविष्यवाणी स्वीकार करने वाला एक वैकल्पिक हस्ताक्षर है, लेकिन यह समझ में नहीं आता कि आपका क्या मतलब है। –

21

इस घटना को आदेश द्वारा उठाया जाता है यह उपभोक्ताओं (अर्थात बटन, MenuItem) है यह CanExecute संपत्ति परिवर्तित हो सकती है कि सूचित करने के लिए। तो यदि फोकस एक टेक्स्टबॉक्स से दूसरे में स्थानांतरित हो जाता है, तो आपके आदेश को सक्षम/अक्षम करने की आवश्यकता हो सकती है। इस जानकारी को आपके आदेश का उपयोग करके किसी भी नियंत्रण में भी पारित करने की आवश्यकता है।

सामान्य रूप से, यह ईवेंट बस CommandManager.RequerySuggested ईवेंट का पुन: उपयोग करता है। RoutedCommand वर्ग से:

public event EventHandler CanExecuteChanged { 
    add { 
     CommandManager.RequerySuggested += value; 
    } 
    remove { 
     CommandManager.RequerySuggested -= value; 
    } 
} 

RequerySuggested गतिविधि सक्रिय अक्सर, के रूप में ध्यान केंद्रित ले जाया जाता है, पाठ चयन बदल जाता है है। इसे InvalidateRequerySuggested पर कॉल करके मैन्युअल रूप से उठाया जा सकता है। जब एक ICommand की CanExecute विधि

बदल जाती है कुछ 3 पार्टी पुस्तकालयों में

+0

मेरे पास एक हटाना आदेश है जो डेटाग्रिड से पंक्ति को हटाता है, और जब मैं डेटाग्रिड से फ़ैक्सबॉक्स पर फ़ोकस करता हूं तो यह आपके द्वारा कहा गया है कि 'CanExecuteChanged' को आग नहीं लगाता है ... मैंने दो बुकमार्क को एडीडी और रिमूव ब्लॉक में रखा है लेकिन कर सकते हैं उस स्थान पर पॉइंटर नहीं मिल रहा है ... – Pritesh

+0

@ प्राइतेश - आपको अपने पास कोड पोस्ट करना होगा। यदि आपके आदेश का उपयोग करने वाला तत्व दिखाई नहीं देता है, तो उसे आपके आदेश से पूछने की आवश्यकता नहीं होगी। आम तौर पर, जब आप अपने CanExecute स्थिति बदलते हैं तो आपको केवल उस ईवेंट को आग लगाना होगा। डब्ल्यूपीएफ ने इसे सामान्य रूप से घटना को बढ़ाने के लिए सामान्यीकृत किया जब उन्हें लगता है कि CanExecute बदल सकता था (यानी फोकस परिवर्तन, चयन परिवर्तन आदि)। – CodeNaked

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