2012-06-16 2 views
-1

У меня есть кнопка, как это:Как управлять выполнением команды реле?

<Button x:Name="buttonGetData" Width="70" Content="GetData" Command="{Binding SaveCommand}" /> 

Я хочу, когда Сохранить команда выполняется до тех пор, пока не завершена пользователь косяк нажмите на мою кнопку или нажал на моей кнопке моя команда не выполняет! мое решение этой проблемы является

bool execute; 
private void MyCommandExecute(CommandParam parm) 
{ 
    if(execute)return; 
    execute=true; 
    ///Some actions 
    execute=false; 

} 

Есть ли лучшее решение для этой проблемы?

+0

И это работает для вас? Если «некоторые действия» не связаны с потоками, вам ничего не нужно делать. –

+0

@HenkHolterman да, это сработало для меня. –

ответ

1

Интерфейс ICommand также определяет метод CanExecute. Возможно, вы сделаете эту команду возвратом false, когда начнется выполнение, и установите ее на true, когда это будет сделано. Это также дает вам возможность отключить кнопку во время выполнения команды.

Я не работаю с RelayCommand, так что я не уверен, если это имеет эквивалент DelegateCommandRaiseCanExecuteChanged метода «s, но с использованием DelegateCommand (который по сути делает то же самое, как RelayCommand), вы могли бы сделать что-то вроде этого (обратите внимание, что эта реализация не является надежной по потоку):

SaveCommand = new DelegateCommand<CommandParam>(MyCommandExecute, MyCommandCanExecute); 

private bool canExecute; 
private bool MyCommandCanExecute() 
{ 
    return canExecute; 
} 

private void MyCommandExecute(CommandParam parm) 
{ 
    // Change the "can execute" status and inform the UI. 
    canExecute = false; 
    SaveCommand.RaiseCanExecuteChanged(); 

    DoStuff(); 

    // Change the "can execute" status and inform the UI. 
    canExecute = true; 
    SaveCommand.RaiseCanExecuteChanged(); 
}