实现一个可重用的命令
实现一个可重用的命令
介绍
如果你正在使用MVVM设计模式,最常使用的机制之一是绑定行为(命令)到视图。为了提供一个命令,你必须实现ICommand接口。这很简单,但是你必须一遍又一遍地做,这很麻烦。
这个设计模式的思想史构建一个通用的命令,该命令接受两个委托。一个当ICommand.Execute(object param)被调用时调用,另一个时当调用CanExecute时评估命令的状态。
除此之外,我们需要一个触发CanExecuteChanged事件的方法。这会导致UI元素重新计算命令的可执行状态。
实现
public class DelegateCommand : ICommand
{
private readonly Predicate<object> _canExecute;
private readonly Action<object> _execute;
public event EventHandler CanExecuteChanged;
public DelegateCommand(Action<object> execute) : this(execute, null)
{
}
public DelegateCommand(Action<object> execute, Predicate<object> canExecute) : this(execute, null)
{
_execute = execute;
_canExecute = canExecute;
}
public override bool CanExecute(object parameter)
{
if(_canExecute == null)
return true;
return _canExecute(parameter)
}
public override void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
if(CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty)
}
}
}

浙公网安备 33010602011771号