WPF —— MVVM 指令执行不同的任务实例

本文介绍了如何在WindowsPresentationFoundation(WPF)中创建和管理自定义命令,包括CanExecute方法的实现、命令执行的差异化处理以及状态改变时的事件触发。作者详细展示了如何通过构造函数传递回调函数来实现命令行为的定制。
摘要由CSDN通过智能技术生成

标签页

设置两个按钮,

 <Button Content="修改状态" Width="100" Height="40" Background="red"
         Click="Button_Click"></Button>
 <Button Content="测试"
         Width="100"
         Height="40"
         Background="red"
         Margin="0,-100,0,0" 
         Command="{Binding M1}"></Button>

cs代码页面 

1 事件成员 状态发生变化的时候事件,

 public event EventHandler CanExecuteChanged;

2 命令是否是可执行状态 参数就是xaml文件通过Commandparameter属性传递过来

如果外部没有控制状态的函数,默认指令可执行
            如果有指令能不能执行的函数,NengBuNengZhiXing返回值为true或者false

public bool CanExecute(object parameter)
{
    if (NengBuNengZhiXing == null) return true; //如果外部没有控制状态的函数,默认指令可执行
    // 如果有指令能不能执行的函数,NengBuNengZhiXing返回值为true或者false

    return NengBuNengZhiXing.Invoke(parameter);  
}

3 命令触发之后执行函数 参数就是xaml文件通过Commandparameter属性传递过来

 public void Execute(object parameter)
 {
     this.ChuFaMingLingFun.Invoke(parameter);

 }

 4 想触发命令之后执行不同的任务,执行不同excute方法,在excute执行外部传递过来的方法,可以
        在创建这个命令对象的把回调函数传递过来,找一个变量接受这个函数,在excute里面进行
        调用变量
        定义委托接受命令触发之后的函数 作为Execute要调用的

Action<object> ChuFaMingLingFun;

//接受判断命令是否能够执行的函数 ,作为CanExecute的判断条件
Func<object, bool> NengBuNengZhiXing;

5 给上面俩个变量赋值 通过构造函数进行赋值

 public MyCommand(Action<object> a1, Func<object,bool> a2)
 {
     this.ChuFaMingLingFun = a1;
     this.NengBuNengZhiXing = a2;

 }

6 如果可执行的状态的发生变化了 触发CanExecuteChanged事件 在外部修改状态的时候调用

 

public void OnCanExecuteChange()
{
    CanExecuteChanged(this, EventArgs.Empty); 
}

7 使用指令
            //定义指令对象 参数一个无参数函数触发命令回调函数,
            //参数2是返回bool类型函数,控制指令状态

 public MyCommand M1 { get; set; }
 public MyCommand M2 { get; set; }
 public MainWindow()
 {
     InitializeComponent();
     this.DataContext = this;

     M1 = new MyCommand(f1,f2);
     M2 = new MyCommand(f3, f2);
 }

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值