深入浅出话命令(Command)-笔记(-)

一 基本概念

命令的基本元素:

  1. 命令(Command):实现了ICommand接口的类,平常使用最多的是RoutedCommand类。
  2. 命令源(Command Source):命令的发送者,实现了ICommandSource接口的类。
  3. 命令目标(Command Target):命令的执行者。,实现了IInputElement接口的类。
  4. 命令关联(Command Binding):把外围逻辑与命令关联起来。

命令的使用步骤:

  1. 创建命令类:创建一个实现ICommand接口的类。
  2. 申明命令实例:实例一个命令类对象。某种操作只需实例化一个对象然后与之对应(单件模式)。
  3. 指定命令源:指定谁来发送命令。
  4. 指定命令目标:指定谁来执行命令。并不是命令属性,而是命令源属性。
  5. 设置命令关联:判断命令是否可执行,执行完成后采取的动作等。

二 小试牛刀

实现这样一个需求:定义一个命令,使用Button 来发送这个命令,当命令到达Textbox时,清空Text(当Textbox为空时,Button不可用)。

XAML代码:

<Window x:Class="CommandApplication.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:CommandApplication"mc:Ignorable="d"Title="MainWindow" Height="175" Width="200"><StackPanel x:Name="stackPanel"><Button x:Name="button1" Content="Send Command" Margin="5"/><TextBox x:Name="textBoxA" Margin="5,0" Height="100"/></StackPanel>
</Window>

CS代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace CommandApplication
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();InitializeCommand();}//RoutedCommand 是系统自带常用的命令类 //申明命令实例private RoutedCommand clearCmd = new RoutedCommand("Clear", typeof(MainWindow));private void InitializeCommand(){//指定命令源this.button1.Command = this.clearCmd;this.clearCmd.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Alt));//指定命令目标,命令源属性中指定sthis.button1.CommandTarget = this.textBoxA;//创建命令关联CommandBinding cb = new CommandBinding();cb.Command = this.clearCmd;cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);cb.Executed += new ExecutedRoutedEventHandler(cb_Execute);//this.stackPanel.CommandBindings.Add(cb);this.textBoxA.CommandBindings.Add(cb);}//当命令送达目标后,此方法被调用private void cb_Execute(object sender, ExecutedRoutedEventArgs e){this.textBoxA.Clear();e.Handled = true;}//当探测命令是否可执行时,此方法被调用private void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e){if (string.IsNullOrEmpty(this.textBoxA.Text)){ e.CanExecute = false; }else{ e.CanExecute = true; }e.Handled = true;}}
}

运行效果:

转载于:https://www.cnblogs.com/ming-cheng/p/8657904.html

深入浅出话命令(Command)-笔记(-)相关推荐

  1. WPF学习之深入浅出话命令

    WPF为我们准备了完善的命令系统,你可能会问:"有了路由事件为什么还需要命令系统呢?".事件的作用是发布.传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件 ...

  2. WPF学习第九集-深入浅出话命令

    WPF为我们准备了完善的命令系统,你可能会问:"有了路由事件为什么还需要命令系统呢?".事件的作用是发布.传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件 ...

  3. 设计模式学习笔记——命令(Command)模式

    设计模式学习笔记--命令(Command)模式 @(设计模式)[设计模式, 命令模式, command] 设计模式学习笔记命令Command模式 基本介绍 命令案例 类图 实现代码 Command接口 ...

  4. 《深入浅出Docker》学习笔记

    <深入浅出Docker>学习笔记 第三章:docker 安装 linux服务器安装:-略 windows服务器安装:-略 确认安装结果 docker --version 第四章:纵观DOc ...

  5. 《深入浅出DPDK》读书笔记(十五):DPDK应用篇(Open vSwitch(OVS)中的DPDK性能加速)

    Table of Contents Open vSwitch(OVS)中的DPDK性能加速 174.虚拟交换机简介 175.OVS简介 176.DPDK加速的OVS 177.OVS的数据通路 178. ...

  6. 《深入浅出DPDK》读书笔记(十四):DPDK应用篇(DPDK与网络功能虚拟化:NFV、VNF、IVSHMEM、Virtual BRAS“商业案例”)

    Table of Contents DPDK应用篇 DPDK与网络功能虚拟化 157.网络功能虚拟化 13.1.1起源 158.发展 159.OPNFV与DPDK NFV的部署 160.NFV的部署 ...

  7. 《深入浅出DPDK》读书笔记(十):硬件加速与功能卸载(VLAN、IEEE1588、IP TCP/UDP/SCTP checksum、Tunnel)

    Table of Contents 109.硬件卸载简介 110.网卡硬件卸载功能 111.DPDK软件接口 接收侧: 发送侧: 112.硬件与软件功能实现 113.VLAN硬件卸载 1. 收包时VL ...

  8. 《深入浅出DPDK》读书笔记(八):网卡性能优化(异步中断模式、轮询模式、混和中断轮询模式)

    本文内容为读书笔记,摘自<深入浅出DPDK> 82.DPDK的轮询模式 <DPDK PMD( Poll Mode Driver)轮询模式驱动程序> DPDK采用了轮询或者轮询混 ...

  9. 《深入浅出DPDK》读书笔记(四):并行计算-SIMD是Single-Instruction Multiple-Data(单指令多数据)

    本文内容为读书笔记,摘自<深入浅出DPDK>. 47.提高处理器主频率对于性能的提升作用是明显而直接的.但一味地提高频率很快会触及频率墙,因为处理器的功耗正比于主频的三次方. 48.提高并 ...

最新文章

  1. Android开发之旅:环境搭建及HelloWorld
  2. jquery - 动态绑定事件
  3. ES6/ES2015核心内容(上)
  4. 谭浩强课后题之----输入一行字符,统计英文字母,数字以及空格数量
  5. java -XX:+PrintFlagsInitial该命令可以查看所有JVM参数启动的初始值
  6. 每秒可产生1亿个序列号的序列生成代码 支持64台服务器同步生成
  7. 使用libjpeg库在LCD上显示图片
  8. cen7布署mysql数据库
  9. windows 程序库
  10. ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
  11. Web前端开发神器-WebStorm
  12. C语言表白代码,复杂动态爱心
  13. dev-cpp的安装教程
  14. 二层交换配置完ping失败_交换机堆叠后部分IP地址PING包不可达问题
  15. javascript:void(0)的作用
  16. IE浏览器极限提速完全攻略(软媒原创)
  17. yandex如何挑选关键词?
  18. potplayer 多个进程_Linux系统编程1.2:进程概念简介
  19. ZEMAX牛顿望远物镜的优化设计
  20. 炫“库”行动-人大金仓有奖征文-KFS数据比对和数据修复

热门文章

  1. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
  2. 【转】android自定义控件
  3. (实用)Ubuntu 、CentOS更换国内源
  4. NSTimer 增加引用计数, 导致内存泄露,
  5. .NET 开发环境中使用VSN版本控制
  6. c语言随机延迟5-10秒,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  7. mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优
  8. openssh windows_WINDOWS环境配置SSH服务
  9. Matlab绘制小波尺度函数和小波函数
  10. fedora14 an mysql_Fedora 14下 MySQL 更改密码