ICommands和DelegateCommand的“CanExecuteMethod”为什么它对我们不起作用?

时间:2009-09-18 14:08:01

标签: silverlight mvvm prism

我们正在尝试使用ICommand在Silverlight中使用Prism设置按钮。我们希望按钮有时会被禁用。 DelegateCommand有2个参数,一个“ExecuteMethod”和一个“CanExecuteMethod”

当我们设置ICommand时,我们希望如果使用“CanExecuteMethod”,那么将调用它以查看是否可以调用“ExecuteMethod”。按钮的启用状态应反映“CanExecuteMethod”

的结果

我们实际看到的内容: 创建表单时,将调用该方法并启用或禁用该按钮。 (在这种情况下,启用) 永远不会再次调用CanExecuteMethod,即使我们尝试设置行为以防止这种情况发生,也会触发Execute方法。抛出Execption(我们想要避免的)。

显而易见的答案是我们应该调用某种方式:

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
        }

1 个答案:

答案 0 :(得分:8)

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

当你调用这个函数时,它将从CanSave函数中刷新控件。

DelegateCommands的OnPropertyChanged等于MyCommand.RaiseCanExecuteChanged。

玩得开心!