2012-06-06 41 views
13

के साथ एक बटन को कैसे सक्षम करें मैं एमवीवीएम का उपयोग करके डब्ल्यूपीएफ में एक एप्लीकेशन विकसित कर रहा हूं, लेकिन मैं आईसीओएमएंड ऑब्जेक्ट्स के साथ फंस गया हूं।अपने कैनएक्सक्यूट विधि

मैं एक खिड़कियों जो कुछ बटन होते है, इसलिए, मैं नीचे के रूप में XAML में उनके संबंधित ICommand करने के लिए उन्हें बाध्य: निम्नलिखित

<Button Command="{Binding DoSomethingCommand}" Content="Do Something" /> 

फिर, मेरे विचार-मॉडल वर्ग में मैं लिखा है:

public class MyViewModel : ObservableObject 
{ 

    private bool isDoSomethingButtonEnabled = false; 
    ....   
    public ICommand DoSomethingCommand 
    { 
     get; 
     private set; 
    } 
    .... 
    .... 
    public MyViewModel() 
    { 
     DoSomethingCommand = new DelegateCommand<String>(this.OnDoSomething, this.CanDoSomething); 
    } 

    private void OnDoSomething(String arg) 
    { 

    } 

    private bool CanDoSomething(String arg) 
    { 
     return isDoSomethingButtonEnabled; 
    } 
    .... 
} 

इसलिए, चूंकि मुझे आवश्यकता है कि मेरा बटन पहली बार विंडो खुलने में सक्षम नहीं है, इसलिए मैंने अपना चर isDoSomethingButtonEnabledfalse पर सेट किया है। और यह काम करता है, बटन शुरुआत में अक्षम है, लेकिन मेरी समस्या यह है कि जब मैं रन टाइम पर परिवर्तनीय isDoSomethingButtonEnabledtrue बदलता हूं तो मेरा बटन अभी भी अक्षम है।

मैं भी true चर isDoSomethingButtonEnabled बदलने, DoSomethingCommand.CanExecute() का परिणाम मुद्रण के बाद कुछ परीक्षण किया है और यह "सही" से पता चलता!

तो, मेरे बटन को सक्षम करने के लिए मुझे क्या करना चाहिए ??

अग्रिम

+0

MVVM एक पैटर्न है, यह DelegateCommand की तरह किसी भी विशिष्ट वर्गों की आवश्यकता नहीं है। क्या आप PRISM का उपयोग कर रहे हैं? –

+0

हाँ, मैं हूं। असल में मुझे इसका उपयोग करना होगा – Dante

उत्तर

14

में धन्यवाद एक घटना ICommand इंटरफ़ेस जिस पर CanExecuteChanged कहा जाता है:

तब होता है जब परिवर्तन को प्रभावित किया जाए या नहीं आदेश पर अमल करना चाहिए होते हैं।

प्रिज्म DelegateCommand आप RaiseCanExecuteChanged विधि के साथ इस घटना को बढ़ा सकते हैं के साथ

:

public void SomeMethod() 
{ 
    //do some work 
    isDoSomethingButtonEnabled = true; 
    DoSomethingCommand.RaiseCanExecuteChanged(); 
} 
+0

आपके उत्तर के लिए धन्यवाद। मैंने कोशिश की है कि आपने अभी लिखा है लेकिन मेरी आईसीओएमएंड ऑब्जेक्ट में ऐसी विधि नहीं है, इसमें 'CanExecuteChanged' ईवेंट है, क्या मुझे इसमें कोई तरीका जोड़ने की ज़रूरत है? – Dante

+1

आपके पास पहले से ही यह तरीका है, आपको बस 'आईसीओएमएंड' से 'डीसमेटिंग कमांड' को वापस 'डेलीगेट कॉमांड ' पर वापस डालना होगा। अपने नमूने में यह '((DelegateCommand ) DoSomethingCommand) .RaiseCanExecuteChanged() के साथ प्रयास करें,' – nemesv

+0

या आप को 'ICommand' से' DoSomethingCommand' का प्रकार बदल सकते हैं 'DelegateCommand '। – nemesv

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

  • कोई संबंधित समस्या नहीं^_^