实现一个可重用的命令

实现一个可重用的命令

介绍

如果你正在使用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)
        }
    }
}
posted @ 2023-08-28 16:12  Juston007  阅读(14)  评论(0)    收藏  举报