2009-09-18 89 views
4

我们尝试使用ICommand在Prism中设置Silverlight中的按钮。我们希望有时按钮被禁用。 DelegateCommand需要2个参数,一个“ExecuteMethod”和一个“CanExecuteMethod”当我们设置ICommand时,我们期望如果使用“CanExecuteMethod”,那么它将被调用以查看是否可以调用“ExecuteMethod” 。该按钮的启用状态应反映“CanExecuteMethod”的结果ICommands和DelegateCommand的“CanExecuteMethod”为什么它不适用于我们?

我们实际看到的内容: 创建窗体时,调用方法并启用或禁用按钮。 (在这种情况下,启用) CanExecuteMethod从不再被调用,即使我们试图设置行为以防止发生,Execute方法也会触发。执行被抛出(我们想避免)。

显而易见的答案是,我们应该呼吁某种:

OnPropertyChanged("SaveCommand"); 

,但我们这样做是错误不知。要么我们假设它的工作方式不适用,或者我们错过了一个步骤。有任何想法吗?

代码:

SaveCommand = new DelegateCommand<string>(OnSaveCommand, CanSave); 

public void OnSaveCommand(string helpNumber) 
     { 
      OnPropertyChanged("SaveCommand"); 
      //DoSaveStuff 
     } 

     public bool CanSave(Object sender) 
     { 
      return Model.CanSave();// true or false depending 
     } 

回答

8

你SaveCommand,因为它是一个DelegateCommand,有一个名为RaiseCanExecuteChanged()的函数。

当您调用此函数时,它将从CanSave函数中更新控件。

与DelegateCommands相等的OnPropertyChanged是MyCommand.RaiseCanExecuteChanged。

玩得开心!

+0

我的DelegateCommand实现没有RaiseCanExecuteChanged方法,但现在感谢您的支持;)正是我所期待的。 – jpierson 2010-11-03 21:51:54

相关问题