0

(の一部)私の 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イベントを使用したこのアプローチの欠点を知っている人はいますか?

4

1 に答える 1