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

标签页

设置两个按钮,

XML 复制代码
 <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 事件成员 状态发生变化的时候事件,

cs 复制代码
 public event EventHandler CanExecuteChanged;

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

如果外部没有控制状态的函数,默认指令可执行

如果有指令能不能执行的函数,NengBuNengZhiXing返回值为true或者false

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

    return NengBuNengZhiXing.Invoke(parameter);  
}

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

cs 复制代码
 public void Execute(object parameter)
 {
     this.ChuFaMingLingFun.Invoke(parameter);

 }

4 想触发命令之后执行不同的任务,执行不同excute方法,在excute执行外部传递过来的方法,可以

在创建这个命令对象的把回调函数传递过来,找一个变量接受这个函数,在excute里面进行

调用变量

定义委托接受命令触发之后的函数 作为Execute要调用的

cs 复制代码
Action<object> ChuFaMingLingFun;

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

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

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

 }

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

cs 复制代码
public void OnCanExecuteChange()
{
    CanExecuteChanged(this, EventArgs.Empty); 
}

7 使用指令

//定义指令对象 参数一个无参数函数触发命令回调函数,

//参数2是返回bool类型函数,控制指令状态

cs 复制代码
 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);
 }
相关推荐
做个文艺程序员1 天前
MQ第12篇:AI原生消息架构演进:从MQ到事件驱动的全链路设计
架构·消息队列·wpf·事件驱动架构·ai-native·cqrs
donk13143 天前
React Native for OpenHarmony 实战:三方库 react-native-circular-action-menu 的鸿蒙化适配指南
javascript·分布式·react native·react.js·wpf·harmonyos
donk13144 天前
React Native for OpenHarmony 实战:三方库 react-native-step-indicator 的鸿蒙化适配指南
分布式·react native·react.js·wpf·harmonyos
He BianGu4 天前
【笔记】WPF中RenderOptions类的详细功能
笔记·wpf
VidDown4 天前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码
He BianGu4 天前
【笔记】WPF中CachingHint的功能
笔记·wpf
He BianGu4 天前
【笔记】在WPF中BitmapScalingMode的作用
笔记·wpf
Vae_Mars5 天前
幂等性学习笔记
笔记·学习·wpf
samble6 天前
从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
c#·wpf·mvvm·modbus·工业控制
光泽雨7 天前
路由概念和路由事件 继承链路 RadioButton的事件解析
wpf