WPF新手村教程第六篇:如何准备新手村BOSS战中的命令?
摘要:WPF个人文档(六)—— 命令 命令最大的作用就是前后端解耦,它并不是事件的上位替代品!!! 一.概念 我们先来看看命令这两个字,在汉语上的词意 命令:一种权威性的指示,通常指上级对下级的口头或书面指示,要求其执行某项任务或采取某种行动 命
WPF个人文档(六)—— 命令
命令最大的作用就是前后端解耦,它并不是事件的上位替代品!!!
一.概念
我们先来看看命令这两个字,在汉语上的词意
命令:一种权威性的指示,通常指上级对下级的口头或书面指示,要求其执行某项任务或采取某种行动
命令往往具有明确的目标和要求,并带有一定的强制性
然后我们再来看看WPF中命令的概念
命令:代指一种明确的指令或者要求,用于向某个目标传递指定的操作或者行为
因此,只从效果上来看,命令和事件的效果视乎一样,但是,命令 ≠ 事件
WPF中的命令是一种行为抽象机制,它将UI触发、执行逻辑和作用目标解耦,并通过CanExecute实现状态驱动的交互控制
命令是对"行为"的对象化封装
它将“触发者”、“执行逻辑”和“作用对象”解耦(前后端解耦),并提供“是否可执行”的状态控制机制(行为约束)
命令(Command)= 把 "一个动作" 抽象成 一个对象
在现实生活中,假设你在对一个AI发起了一个命令,那么我们的流程是
编辑执行命令内容 -> 选择命令目标 -> 告诉AI执行什么操作 -> 行为约束
# 其中涉及到
命令发出者
命令接收者
命令内容
命令执行者
开始执行命令
完成执行内容
汇报执行结果
而我们使用的命令,和这个流程其实非常相似(参考小结中的流程图)
二.命令的四个概念
命令源(Command Source)
↓ # 触发
命令(Command)
↓ # 查找
命令绑定(Command Binding)
↓ # 执行
命令目标(Command Target)
1.0 命令(Command) —— 继承ICommand接口
本质上其实就是实现了一个ICommand对象
主要负责2件事情
Execute(执行逻辑)
CanExecute(能不能执行)
1.1 预定义命令库✳
预定义命令库:WPF内置的一组标准命令(已经实现好的 ICommand)
不用写 RelayCommand了,开袋即食,别造轮子了
预定义命令 = 官方帮你定义好的“行为规范”,而不是具体实现
常用的命令库(预定义)有五个静态类
ApplicationCommands # 应用通用
NavigationCommands # 导航(页面跳转)
EditingCommands # 文本编辑
ComponentCommands # 组件
MediaCommands # 媒体控制
# 使用时,请随用随查,而且除了第一个,基本上不怎么使用,了解即可
# 使用频率大概是:
ApplicationCommands >>> EditingCommands > NavigationCommands > MediaCommands > ComponentCommands
示例代码:
新建一个操作,这个操作绑定到逻辑CommandBinding_Executed上
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.New" Executed="CommandBinding_Executed"/>
</Window.CommandBindings>
下面大致列举了一部分常用的预定义命令:
随用随查,别背,没用,顶多记一下ApplicationCommands通用类的几个,毕竟大多数都用不上
(1)ApplicationCommands应用通用类
命令
作用
常见场景
Copy
复制选中内容
TextBox / 数据编辑
Cut
剪切选中内容
文本编辑
Paste
粘贴剪贴板内容
输入框
Save
保存数据
文件/表单
SaveAs
另存为
文件系统
Open
打开文件
文件操作
New
新建内容
编辑器
Undo
撤销操作
编辑器
Redo
重做操作
编辑器
Delete
删除选中项
列表/文本
Print
打印内容
报表/文档
(2)NavigationCommands导航(页面跳转)类
命令
作用
常见场景
Back
返回上一页
页面导航
Forward
前进
页面导航
Refresh
刷新当前页面
Web/数据页
BrowseHome
返回首页
应用
