Delegatecommand,relaycommand和的RoutedCommand之间的区别(D

2019-07-17 21:28发布

我感到困惑的命令模式。 大约有命令这么多不同的解释。 我想下面的代码是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; }
    }

}

Answer 1:

您的FindProductCommand类实现ICommand接口,这意味着它可以被用作一个WPF 命令 。 它既不是DelegateCommand也不是RelayCommand ,也不是一个RoutedCommand ,这是其他实施方式ICommand接口。


FindProductCommand VS DelegateCommand / RelayCommand

一般来说,当一个实现ICommand名为DelegateCommandRelayCommand ,其用意是,你不必编写一个实现类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


文章来源: Difference between Delegatecommand, relaycommand and routedcommand
标签: c# mvvm command