我感到困惑的命令模式。 大约有命令这么多不同的解释。 我想下面的代码是delegatecommand,而是阅读有关relaycommand后,我在怀疑。
是什么relaycommand,delegatecommand和的RoutedCommand之间的差异。 是否有可能在有关联到我的贴的代码示例显示?
class FindProductCommand : ICommand
{
ProductViewModel _avm;
public FindProductCommand(ProductViewModel avm)
{
_avm = avm;
}
public bool CanExecute(object parameter)
{
return _avm.CanFindProduct();
}
public void Execute(object parameter)
{
_avm.FindProduct();
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
您的FindProductCommand
类实现ICommand
接口,这意味着它可以被用作一个WPF 命令 。 它既不是DelegateCommand
也不是RelayCommand
,也不是一个RoutedCommand
,这是其他实施方式ICommand
接口。
FindProductCommand
VS DelegateCommand
/ RelayCommand
一般来说,当一个实现ICommand
名为DelegateCommand
或RelayCommand
,其用意是,你不必编写一个实现类ICommand
接口; 相反,你通过必要的方法作为参数传递给DelegateCommand
/ RelayCommand
构造。
例如,而不是你的整个类的,你可以写:
ProductViewModel _avm;
var FindPoductCommand = new DelegateCommand<object>(
(parameter) => _avm.FindProduct(),
(parameter) => _avm.CanFindProduct()
);
的某些实现DelegateCommand
/ RelayCommand
:
- 微软棱镜DelegateCommand参考
- WPF教程执行
ICommand
称为DelegateCommand
- 另一种实现也称为
DelegateCommand
- 在原执行
RelayCommand
由约什-史密斯
有关:
- 继电器/ ICommand的VS DelegateCommand -差异
FindProductCommand
VS RoutedCommand
你FindProductCommand
将执行FindProduct
时触发。
WPF的内置RoutedCommand
做别的东西:它提出了一个路由事件可以被其它对象的可视化树进行处理。 这意味着可以附加一个命令结合那些其他对象来执行FindProduct
,而附接RoutedCommand
本身具体地,涉及触发命令的一个或多个对象,例如一个按钮,菜单项,或上下文菜单项。
一些相关的SO答案:
- MVVM路由和中继命令
- WPF的ICommand VS的RoutedCommand