2

コンテキスト メニューが開いている間に ICommand を実行できます

上記のクエリの継続では、まだ達成できません。

コンテキスト メニューを開いているときに、コンテキスト メニュー コマンドの CanExcute を発生させる方法はありますか。これはコンテキスト メニュー自体で行う必要があり、ここではビューモデルにアクセスできません。

これについて何か考えはありますか?

    public static BaseCommand SaveCommand
    {
        get
        {
            if (saveCommand == null)
                saveCommand = new BaseCommand(OnSaveCommandClicked, OnSaveCommandCanExcute);

            return saveCommand;
        }
    }

ここで、BaseCommand は ICommand から派生しています。

public class BaseCommand : ICommand
{
    private Predicate<object> _canExecute;
    private Action<object> _method;
    public event EventHandler CanExecuteChanged;

    public BaseCommand(Action<object> method)
        : this(method, null)
    {
    }

    public BaseCommand(Action<object> method, Predicate<object> canExecute)
    {
        _method = method;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        if (_canExecute == null)
        {
            return true;
        }

        return _canExecute(parameter);
    }

    public void Execute(object parameter)
    {
        _method.Invoke(parameter);
    }

}
4

1 に答える 1

0

内の を次のようBaseCommandに置き換えます。CanExecuteChangedそして、それはあなたが望むように機能します。

   public event EventHandler CanExecuteChanged
    {
        add
        {
            CommandManager.RequerySuggested += value;
        }
        remove
        {
            CommandManager.RequerySuggested -= value;
        }
    }
于 2013-08-27T08:59:11.047 に答える