using System; using System.Windows.Input; namespace ECMonitor.MVVM { public class ExtendCommand : ICommand { /// /// 检查命令是否可以执行的事件,在UI事件发生导致控件状态或数据发生变化时触发 /// public event EventHandler CanExecuteChanged { add { if (_canExecute != null) { CommandManager.RequerySuggested += value; } } remove { if (_canExecute != null) { CommandManager.RequerySuggested -= value; } } } /// /// 判断命令是否可以执行的方法 /// private Func _canExecute; /// /// 命令需要执行的方法 /// private Action _execute; /// /// 创建一个命令 /// /// 命令要执行的方法 public ExtendCommand(Action execute) : this(execute, null) { } /// /// 创建一个命令 /// /// 命令要执行的方法 /// 判断命令是否能够执行的方法 public ExtendCommand(Action execute, Func canExecute) { _execute = execute; _canExecute = canExecute; } /// /// 判断命令是否可以执行 /// /// 命令传入的参数 /// 是否可以执行 public bool CanExecute(object parameter) { if (_canExecute == null) return true; return _canExecute((T)parameter); } /// /// 执行命令 /// /// public void Execute(object parameter) { if (_execute != null && CanExecute(parameter)) { _execute((T)parameter); } } } }