我们尝试使用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
}
我的DelegateCommand实现没有RaiseCanExecuteChanged方法,但现在感谢您的支持;)正是我所期待的。 – jpierson 2010-11-03 21:51:54