2013-08-27 154 views
2

Can Execute of a ICommand while a Context menu open擡起上下文菜單命令的CanExcute同時打開上下文菜單

通過上述查詢的延續,仍然是其沒有能夠實現。

有什麼辦法可以在打開上下文菜單的同時提高上下文菜單命令的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); 
    } 

} 
+1

你可以提供你的'ICommand'實現菜單嗎?如果你委託'CommandManager'來提升'CanExecute',它通常應該可以工作。 –

+0

@Mathew:我已經更新了上面的代碼,有沒有什麼辦法可以提高canExcute。這個上下文菜單確實知道它會攜帶哪些項目,但是如果這個上下文菜單的項目有任何命令,它需要提高ICommand的可執行性。 – Sankarann

+0

請顯示'ICommand'的實現,即實現那個接口的類,它從你的代碼看起來似乎是'BaseCommand'。顯示目前在'BaseCommand'內引發'CanExecuteChanged'事件的代碼。 –

回答

0

裏面BaseCommand,更換CanExecuteChanged看起來像下面這樣。它會以你想要的方式工作。

public event EventHandler CanExecuteChanged 
    { 
     add 
     { 
      CommandManager.RequerySuggested += value; 
     } 
     remove 
     { 
      CommandManager.RequerySuggested -= value; 
     } 
    }