当前位置: 首页 > news >正文

第七章-命令

一、命令的概念

WPF命令是一种任务封装、用于实现MVVM模式中的重要一环。

命令系统包括命令、命令源、命令目标和命令绑定,它们共同构成了WPF中的主要核心要素。

命令与模板、数据绑定一起,实现了前后端的逻辑分离

 

二、命令的组成

(1)命令(继承ICommand接口)
RoutedUICommand->RoutedCommand->ICommand

命令库(预定义):5个静态类(5组)。大部分都是RoutedUICommand对象。
ApplicationCommands、NavigationCommands、EditingCommands、ComponentCommands、MediaCommands

(2)命令源(ICommandSource)
调用命令的对象
  (2.1)Command:指向连接的命令。必须有
  (2.2)CommandParameter:提供其他希望随命令发送的数据,
  (2.3)CommandTarget:确定将在执行命令的元素。
(3)命令目标:是要在其上执行命令的对象。继承IInputElement即可
(4)命令绑定(CommandBinds)将某个命令与一些逻辑代码进行绑定

  <!--命令对象为ApplicationCommands.New执行逻辑为CommandBinding_Executed二者通过以下代码绑定--><Window.CommandBindings><CommandBinding Command="ApplicationCommands.New" Executed="CommandBinding_Executed"></CommandBinding></Window.CommandBindings><StackPanel><Button Command="ApplicationCommands.New"  CommandTarget="{Binding ElementName=btn_Target}">按钮(命令源)</Button><Button x:Name="btn_Target">命令目标</Button></StackPanel>

 

三、自定义命令

 public class CustCmd : ICommand{public event EventHandler? CanExecuteChanged;//命令状态发生改变的事件// 能否执行该命令,命令状态public bool CanExecute(object? parameter){return true;}// 如何执行,目前未分离业务public void Execute(object? parameter){//业务逻辑MessageBox.Show($"已经在执行,参数为{parameter}");}}
  <Window.Resources><cmd:CustCmd x:Key="cuscmd"></cmd:CustCmd></Window.Resources><Grid><Button Command="{StaticResource cuscmd}" CommandParameter="Hello" Width="400" Height="200"> 自定义命令</Button></Grid>

 

 

四、将业务代码修改为委托类型

  当没有参数、没有返回值:使用Action

  当有参数、没有返回值:使用Action<T1,T2...>

  当没有参数,有返回值使用Func<T1>

  当有参数、有返回值:使用Func<T1,T2>

 //将业务从命令地址分离出来,将要处理的业务方法传递给命令(系统委托)public class CustCmdNotBusin : ICommand{//1、无参数、无返回值public Action CmdAction { set; get; }   //委托public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){return true;}public void Execute(object? parameter){if (CmdAction != null){CmdAction.Invoke();//执行委托
         }}}

  

http://www.jsqmd.com/news/95072/

相关文章:

  • 05-Qwen3的嵌入模型和langchain的整合
  • 【详解】Hydra安装Libssh模块
  • python训练营打卡DAY13
  • 【一句话概述】Webpack、Vite、Rollup 核心区别
  • Windows驱动管理终极指南:Driver Store Explorer高效使用手册
  • 小米运动步数自动同步:2025年免费刷步数完整教程
  • 小米运动步数自动同步:2025年免费刷步数完整教程
  • Daihatsu Key Programming Made Easy: Lonsdor K518 Pro FCV License Activation for Shops Owners
  • 【关于Java的泛型(基础)】 - 教程
  • 计算机毕设之基于hadoop的好大夫数据大屏可视化分析系统
  • 3分钟搞定视频色彩优化:LosslessCut让你的视频瞬间变专业
  • 付费墙绕过工具终极指南:5步轻松解锁优质内容
  • FLUX.1-dev提示词工程优化:提升概念组合与构图准确率
  • Isuzu Key Programming: Lonsdor K518 Pro FCV License Activation for European/American Shops Owners
  • 如何高效管理Windows驱动程序?Driver Store Explorer完整使用指南
  • Mamba: Linear-Time Sequence Modeling with Selective State Spaces 译读笔记 - 实践
  • 導出知乎收藏夾
  • 繞過 15 歲的高牆
  • 浏览器串口工具革命:零安装体验硬件调试新时代
  • 繞過 15 歲的高牆
  • Zepp Life自动刷步终极指南:3分钟搞定微信支付宝同步
  • 视频压缩APP - Alpha版本测试报告
  • 乌云邀请码
  • Qwen3-14B vs 其他14B模型:谁更适合企业级应用开发?
  • Ollama pull命令获取最新Qwen3-VL-30B模型更新
  • AI干部人事管理系统:用技术让人才管理更精准高效
  • 终极指南:如何在VMware中免费解锁macOS虚拟机支持
  • 从卧床不起到健步如飞 退休老阿姨用机器人治腰突的亲身体验!
  • 谷歌镜像站同步更新:Qwen-Image全球加速访问
  • FLUX.1-dev与Docker镜像优化:最小化容器体积提升加载速度