我正在执行以下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
答案 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委托以进行评估。