-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インターフェイスはメソッドも定義しますCanExecutefalse実行が開始されたときにそのコマンドを返し、true完了時に戻すことができます。これにより、コマンドの実行中にボタンを無効にするという利点も得られます。

私はを扱っていないので、のメソッドRelayCommandと同等のものがあるかどうかはわかりませんが、 (これは基本的に と同じことを行います) を使用すると、次のようなことができます (この実装はスレッドではないことに注意してください)。安全):DelegateCommandRaiseCanExecuteChangedDelegateCommandRelayCommand

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 に答える