CanExecuteChanged を使用して「実行可能」条件を変更できますか?
それとも... 「何のために」使用されますか?
いいえ、実行可能状態を変更するために使用することはできません。これはイベントであり、パターンに参加するオブジェクトはICommand
このイベントをリッスンすることを選択できます。たとえば、ボタンはこのイベントを使用して、(can execute メソッドを呼び出して) コマンドの状態を再クエリして有効な状態に設定するタイミングを知ることができます。
can execute パターンが有用であるためには、イベントを発生させるために使用できる何かが必要です。PrismDelegateCommand
には、このイベントを手動で発生させるために呼び出すことができるメソッドがあるため、サブスクライバーは、パターンを選択した場合に実行可能メソッドを再クエリします。
例
次の Prism ベースの例では、保存コマンドの実行中に SaveCommand の状態をCanExecute
false から true に変更します。への呼び出しRaiseCanExecuteChanged
により、CanExecuteChanged
イベントが発生し、クライアントがCanExecute
メソッドを呼び出します。実際には、これSaveCommand
により、状態を有効から無効に変更し、再び有効に戻すようにバインドされた [保存] ボタンが作成されます。
public class BlingViewModel
{
private DelegateCommand<object> _saveCommand;
private bool _canSaveExecute = true;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new DelegateCommand<object>
(
executeMethod: _ => Save()
,
canExecuteMethod: _ => _canSaveExecute
);
}
return _saveCommand;
}
}
private void Save()
{
_canSaveExecute = false;
_saveCommand.RaiseCanExecuteChanged();
Console.WriteLine("Saving...");
_canSaveExecute = true;
_saveCommand.RaiseCanExecuteChanged();
}
}
または、ハンドラーが再評価されるSystem.Windows.Input.CommandManager.InvalidateRequerySuggested()
ように呼び出すだけです。CanExecute