2011-06-08 21 views
2

我已經爲DelegateCommand寫了一個CanExecute方法。 CanExecute不會被重新評估爲從CommandBase繼承的其他命令,看起來像這樣。我應該在Prism的DelegateCommand中調用RaiseCanExecuteChanged嗎?

public abstract class CommandBase : ICommand 
{ 
    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public void RaiseCanExecuteChanged() 
    { 
     CommandManager.InvalidateRequerySuggested(); 
    } 

    public virtual bool CanExecute(object parameter) 
    { 
     return true; 
    } 

    public abstract void Execute(object parameter); 
} 

我可以作出這樣的棱鏡DelegateCommand工作,所以CanExecute會自動重新評估適當的時候還是應該手工調用RaiseCanExecuteChanged()的時候需要?

回答

1

命令或命令管理器應該如何知道它的執行狀態已更改?要讓他們知道您需要通過RaiseCanExecuteChanged方法發出信號。

+0

是的命令管理員應該怎麼知道?我不知道,但使用命令庫我不必調用RaiseCanExecuteChanged – Karsten 2011-06-09 08:38:49

+2

因爲您使用的是Prism DelegateCommand。 DelegateCommand類派生自DelegateCommandBase而不是來自CommandBase。我猜想CommandManager本身不會在任何其他類上調用CanExecute,而是在CommandBase上。 – PVitt 2011-06-09 08:47:37

相關問題