2013-02-25 58 views
6

मैं आदेश के बाद किया है:RelayCommand CanExecute व्यवहार

<Button x:Name="bOpenConnection" Content="Start Production" 
     Grid.Row="0" Grid.Column="0" 
     Height="30" Width="120" Margin="10" 
     HorizontalAlignment="Left" VerticalAlignment="Top" 
     Command="{Binding Path=StartProductionCommand}"/> 

StartProductionCommand = new RelayCommand(OpenConnection, CanStartProduction); 

private bool CanStartProduction() 
{ 
    return LogContent != null && !_simulationObject.Connected; 
} 

CanStartProduction केवल जब मैं फिर से आकार यूआई चेक किया गया है और मक्खी पर अद्यतन नहीं। कोई विचार क्यों हर बार जब वे मूल्य बदलते हैं तो इसे अपडेट नहीं किया जाता है?

उत्तर

15

CommandManager देखना जानते हुए भी कि आदेश LogContent और _simulationObject.Connected पर निर्भर करता है का कोई तरीका नहीं देखते हैं, तो यह स्वचालित रूप से CanExecute पुनर्मूल्यांकन नहीं कर सकता है जब इन गुणों को बदलने।

आप स्पष्ट रूप से CommandManager.InvalidateRequerySuggested पर कॉल करके पुनर्मूल्यांकन का अनुरोध कर सकते हैं। ध्यान दें कि सभी आदेशों के लिए यह CanExecute का पुनर्मूल्यांकन करेगा; यदि आप केवल एक को रीफ्रेश करना चाहते हैं, तो आपको StartProductionCommand.RaiseCanExecuteChanged पर कॉल करके कमांड पर CanExecuteChanged ईवेंट को बढ़ाने की आवश्यकता है।

+0

क्या आप इसका उदाहरण कैसे उपयोग कर सकते हैं या पोस्ट लिंक कर सकते हैं? मेरा मतलब है कि आप इसे कहां कहते हैं? – batmaci

+1

@batmaci, आप केवल 'CommandManager.InvalidateRequerySuggested' को कॉल करते हैं जब आप अपने आदेश का 'CanExecute' पुन: मूल्यांकन करना चाहते हैं –

0

आप RaiseCanExecute को कॉल कर सकते हैं उदाहरण के लिए PropertyChanged Eventhandler।

कमांड राज्यों को अक्सर ताज़ा नहीं किया जाता है।

कुछ समय पहले मैंने इसके बारे में एक अच्छा लेख पढ़ा था। मैं इसे बाद में पोस्ट करूंगा।

भी http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your-icommand-objects/

भी Refresh WPF Command