(の一部)私の ICommand 実装は次のとおりです。
public void RaiseCanExecuteChanged()
{
CommandManager.InvalidateRequerySuggested();
}
public event EventHandler CanExecuteChanged
{
add
{
CommandManager.RequerySuggested -= value;
CommandManager.RequerySuggested += value;
}
remove => CommandManager.RequerySuggested -= value;
}
これは、RaiseCanExecuteChanged() を呼び出すときに UI で正常に機能しますが、単体テストでは、CanExecute メソッドを呼び出す必要があることが UI に通知されているかどうかを知りたいです。CommandManager が代わりに使用されるため、このイベントはトリガーされないため、CanExecuteChanged イベントへのサブスクライブは機能しません。CommandManager.InvalidateRequerySuggested がトリガーされたかどうかをテストする方法を知っている人はいますか?
また、CommandManager を使用せず、実装を次のように変更することも検討しています。
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
public event EventHandler CanExecuteChanged;
利点は、CommandManager に登録されたすべてのコマンドではなく、特定のコマンドに対してのみ CanExecute の呼び出しをトリガーすることです。CommandManager に関する私の理解が正しいことを確認できますか? 「通常の」CanExecuteChangedイベントを使用したこのアプローチの欠点を知っている人はいますか?