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 回答