RelayCommand&DelegateCommand 小例子看区别

2016-12-07 20:33:40来源:CSDN作者:shaoerbao人点击

第七城市

一个小例子,用来展示wpf中的RelayCommand和DelegateCommand区别。

我当时是看了这篇 RoutedComand/RelayCommand/DelegateCommand 的实现比较 文章后知道的这个区别,所以贴在这里。

下面的RelayCommand类和DelegateCommand类都是照着文中的代码写的,故不再贴出。


View

界面

  • Can Click
    canclick

  • Relay Command Click Me
    click1

  • Delegate Command Update & Click Me
    click2

ViewModel

  • 下拉列表数据源

  • 下拉列表选中的值

  • RelayClick按钮Command

    这里写图片描述

  • DelegateClick按钮Command

  • 两个Click Me按钮共同绑定的Command方法CanClick和OnClick

  • UpdateDelegateClickState按钮Command以及方法

由于这里不涉及Command的CanExecute判断,所以没必要区分RelayCommand或DelegateCommand

也就是说,这两种Command实现类型只在ICommand接口中的CanExecute方法的调用过程上有区别

// Summary:
// Defines the method that determines whether the command can execute in its
// current state.
//
// Parameters:
// parameter:
// Data used by the command. If the command does not require data to be passed,
// this object can be set to null.
//
// Returns:
// true if this command can be executed; otherwise, false.
bool CanExecute(object parameter);


直接看结果

运行

两个按钮都是不可用状态,也就是两个ICommand的CanExecute方法都返回下拉列表所选项对应的值false

然后选择下拉列表的Ture选项

此时,RelayCommand自动更新了按钮的可用状态,而DelegateCommand那边的按钮状态没有更新。

接下来手动更新DelegateCommand按钮的可用状态

点击Update按钮

DelegateCommand按钮的可用状态变为了可用,即DelegateCommand调用了CanExecute方法,更新了其状态。

同样地,再选择下拉列表的False选项

同样是RelayCommand那边自动更新,而DelegateCommand这边还是之前的状态。

点击Update按钮进行更新


例子就到这里,具体的代码原理部分网上很多,就不说了。


本文所用示例项目

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台