C#:WinForm之Command
2015-12-25 10:32
489 查看
本文主要介绍WinForm项目中如何像WPF一样优雅的使用Command来实现业务操作。想必大家已经疲于双击控件生成事件处理方法来实现业务操作,如多控件(按钮、菜单、工具条、状态栏等命令控件)来做同一个动作,还要控制它们启用(Enabled)状态等等,使代码结构冗长且可读性差。下面具体介绍和实现WinForm中对Command的应用。
命令(Command)
顾 名思义,定义一个命令,继承至System.Windows.Input.ICommand接口,实现 Execute(object) ,CanExecute(object)方法和 CanExecuteChanged事件。由 CanExecute 确定是否调用 Execute 执行该命令。
DelegateCommand 代码
补充:不好意思,忘记附上Demo示例,现补上,请前往 百度网盘 下载
本文如有纰漏,欢迎大家批评指正!
命令(Command)
顾 名思义,定义一个命令,继承至System.Windows.Input.ICommand接口,实现 Execute(object) ,CanExecute(object)方法和 CanExecuteChanged事件。由 CanExecute 确定是否调用 Execute 执行该命令。
/// <summary> /// 表示一个可被执行委托的方法的命令。 /// </summary> public sealed class DelegateCommand : Command { private Action<object> execute; private Func<object, bool> canExecute; /// <summary> /// 初始化 <see cref="DelegateCommand"/> 新实例。 /// </summary> /// <param name="execute">当命令被调用时,指定的方法。</param> /// <param name="canExecute">当命令被确定是否能执行时,执行的方法。</param> public DelegateCommand(Action<object> execute, Func<object, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } /// <summary> /// 定义用于确定此命令是否可以在其当前状态下执行的方法。 /// </summary> /// <param name="parameter">此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null。</param> /// <returns>如果可以执行此命令,则为 true;否则为 false。</returns> public override bool CanExecute(object parameter) { if (canExecute == null) { return true; } return canExecute(parameter); } /// <summary> /// 定义在调用此命令时调用的方法。 /// </summary> /// <param name="parameter">此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null。</param> public override void Execute(object parameter) { if (CanExecute(parameter)) { execute(parameter); } } }
DelegateCommand 代码
补充:不好意思,忘记附上Demo示例,现补上,请前往 百度网盘 下载
本文如有纰漏,欢迎大家批评指正!
相关文章推荐
- 对dijkstra算法的自我理解,c#例子
- C#中的线程二(BeginInvoke和Invoke)
- C#中相对路径转换为绝对路径的方法
- .NET/C# 各版本变化及衍生知识点 C# 6.0
- C#基础--面向过程计算器
- 在C#中 webbrowser的使用心得
- C#中变量的使用以及命名方法
- C# ListView用法详解 很完整
- C#学习笔记 对象序列化
- C# Windows Service中执行死循环轮询
- CLR via C#深解笔记二 - 类型设计
- C#:DataSet和DataTable区别
- C#序列化匿名对象为XML
- C#开源框架(整理)
- c#之线性表
- C#动态链接库创建和使用实例
- C#可变参数的使用
- C#调用百度地图API经验分享(一)
- C# 二维list
- C#中静态与非静态方法比较