WPF中的命令(Command)

这节来讲一下WPF中的命令(Command)的使用。

【认识Command】

    我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命令,从View中使用Binding绑定命令,就能实现从View到ViewModel之间操作的流通。

    ICommand 接口:

    所有的命令都是需要继承ICommand接口,该接口有如下三个成员:

ce973a13a46557f2f72321a0158c000c.png

    我们先说第二个成员,它是个返回值为bool的方法,通过这个方法,可以设置命令能不能继续执行,即返回值为TRUE,命令继续执行,返回值为FALSE命令不会执行;

    第一个成员是个事件处理器,从名字可以看出来该事件处理器关注于第二个成员,也就是当命令能否执行的状态出现改变时可以使用此事件通知到关注此命令执行状态的成员;

    第三个成员也是个方法,命令的执行逻辑放在这个方法里边,当CanExecute返回值为TRUE时,该方法才会被执行。

【自定义Command】

    下面我们就来自定义一个命令,这样能比较方便的演示命令的使用:

    本节以MVVM模式演示,项目结构如下:

4b6fd0168d63471b007008f71d34f098.png

    MyCommand为自定义的命令类,代码如下:

82c39b91f67c1de33761b5d38cf8f016.png

    MyCommand类在实例化时需要外部传入执行的方法以及能否继续执行的判断方法。

    MainViewModel中的代码如下:

67669112825f9099ac04e4e68bbd4b6f.png

    在ViewModel中声明命令要注意,命令必须是属性,不能是字段。

    View代码如下:

68dd064c803d184a60547916cc7fd913.png

    在Button有个Command属性,我们可以直接使用Binding和ViewModel中的命令对象做绑定。

    此处要注意MainView的构造方法中这一行代码:

13053d0cdfcaedf7f145debd62f75755.png

    DataContext属性要设置为ViewModel实例,这样View才能跟ViewModel关联上,从而使用Binding才能绑定上MyCommand命令。

    另外需要知道的是,Button中的Command是通过点击触发的,也就是说当你点击的Button命令就会执行,其它的控件,如ListBox中的Item,需要双击才能执行命令,因为单击是选中Item。

    当程序运行时,点击按钮,输出窗口会打印“命令被执行了”字样:

74ce373ccfaa08a358464464e83fa551.png

    然后我们清除掉输出窗口的内容,当再一次点击按钮时,因为isCanExec被设置为FALSE,所以命令终止执行,输出窗口无内容:

1a9934114d863ca2837f34015284ceb6.png

d1f45d075781290b94a37d1bf184cc2c.png

【命令参数CommandParameter】

    如果命令仅仅是这样使用,那就太单调了,大家肯定注意到了Execute和CanExecute方法还有个类型为object的参数,这个参数就是命令参数,它可以接收我们自定义的数据,在执行命令时传入进来,我们则可以根据这个参数,对执行逻辑做多样化的判断,下面我将代码稍作改变:

    在界面上放置两个按钮,并修改ViewModel代码为如下所示:

650c548051a623811f6fb7bd61d383a6.png

    在Button中使用CommandParameter属性设置命令的参数,默认会将数据当做string处理,当然它也可以使用Binding跟其它属性做绑定,关于View与ViewModel之间的数据绑定,我们后期讲解。

1949b2b9050aad57d415eae4c4d54ee0.png

    在MyCommand的执行逻辑中判断参数的值,从而输出不同的结果,一次点击按钮结果如下:

cb9d3334b18aec077ff16d4979738c96.png

-----------------------------------

需要进技术群交流的,请添加小编mm1552923

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF ,可以使用 Command 属性将一个命令绑定到 Button 控件上,使得点击按钮时会执行该命令。具体步骤如下: 1. 创建一个实现了 ICommand 接口的命令类,例如: ``` public class MyCommand : ICommand { public event EventHandler CanExecuteChanged; public bool CanExecute(object parameter) { // 返回一个 bool 值,表示该命令是否可执行 return true; } public void Execute(object parameter) { // 执行命令的逻辑 } } ``` 2. 在 XAML 定义 Button 控件,并将其 Command 属性绑定到上面创建的命令类的实例,例如: ``` <Button Content="Click Me" Command="{Binding MyCommand}" /> ``` 其,Binding 的 Source 属性应该指向包含 MyCommand 属性的 ViewModel 对象。 3. 如果需要在 Command 执行前后进行一些操作,可以在 Button 控件上绑定 CommandParameter 属性和 CommandBinding 对象的相应事件,例如: ``` <Button Content="Click Me" Command="{Binding MyCommand}" CommandParameter="Hello, World!" CommandBindings="{StaticResource MyCommandBindings}" /> ``` 其,MyCommandBindings 是一个定义了 CommandBinding 对象的资源,例如: ``` <Window.Resources> <CommandBindingCollection x:Key="MyCommandBindings"> <CommandBinding Command="{x:Static local:MyCommands.MyCommand}" Executed="MyCommand_Executed" /> </CommandBindingCollection> </Window.Resources> ``` 其,MyCommands.MyCommand 是上面创建的命令类的静态属性,MyCommand_Executed 是一个在命令执行后调用的事件处理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值