ICommand实施问题

时间:2010-01-26 13:04:11

标签: c# wpf mvvm command

我正在执行以下tutorial,以了解WPF中的MVVM模式。关于以下看似部分给出了ICommand接口的实现,我有些不明白的地方。

在下面的代码中,_canExecute变量用作方法和变量。我认为这是某种类型的事件,但ICommand已经有一个事件要实现,而且它不是_canExecute。

那么有人可以帮我解决_canExecute应该是什么吗?

  1: #region ICommand Members
  2: 
  3: public bool CanExecute(object parameter) {
  4:     return _canExecute == null ? true : _canExecute(parameter);
  5: }
  6: 
  7: public event EventHandler CanExecuteChanged {
  8:     add { CommandManager.RequerySuggested += value; }
  9:     remove { CommandManager.RequerySuggested -= value; }
 10: }
 11: 
 12: public void Execute(object parameter) {
 13:     _execute(parameter);
 14: }
 15: 
 16: #endregion

4 个答案:

答案 0 :(得分:3)

_canExecute将是Predicate<object>,而_ execute则是Action<object>

另请参阅我的delegate command blog post

答案 1 :(得分:0)

我可能错了,但据我所知,ICommand通常是如何实现的,我可以理解本教程,有一个错误,应该阅读

public bool CanExecute(object parameter) {
   return _execute == null ? false : true;
}

或者_canExecute是转发请求的函数对象。在这种情况下,教程不清楚。

无论如何,我会向作者咨询他的想法。

答案 2 :(得分:0)

我认为代码编写者希望通过Predicate委托解耦CanExecute逻辑,因此Base Command类的继承者可以决定是否可以像这样执行CanExecute

class DefaultCommand:BaseCommand
{
    //_canExecute is supposed protected Predicate<string> in base class
    public DefaultCommand()
    {
       base._canExecute =x=>x=="SomeExecutable";
    }
}

答案 3 :(得分:0)

默认假设是CanExecute始终为true,除非传递了bool委托以进行评估。