-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;

}

这个问题有更好的解决方案吗?

4

1 回答 1

1

ICommand接口还定义了一个CanExecute方法。您可以在执行开始时使该命令返回false,并在执行完成时将其设置回true。这也为您提供了在命令执行期间禁用按钮的好处。

我不使用RelayCommand,所以我不确定它是否与 ' 方法等效,DelegateCommand但是RaiseCanExecuteChanged使用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();
}
于 2012-06-16T17:36:28.307 回答