您的位置:首页 > 编程语言 > C#

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 执行该命令。

/// <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示例,现补上,请前往 百度网盘 下载

  本文如有纰漏,欢迎大家批评指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: