using System; using System.Windows.Input; namespace BrightSharp.Commands { public class RelayCommand : ICommand { private readonly Action _methodToExecute; private readonly Action _methodToExecuteWithParam; private readonly Func _canExecuteEvaluator; public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } public RelayCommand(Action methodToExecute, Func canExecuteEvaluator = null) { _methodToExecuteWithParam = methodToExecute; _canExecuteEvaluator = canExecuteEvaluator; } public RelayCommand(Action methodToExecute) { _methodToExecute = methodToExecute; } public bool CanExecute(object parameter) { if (_canExecuteEvaluator == null) return true; else return _canExecuteEvaluator.Invoke(parameter); } public void Execute(object parameter) { _methodToExecuteWithParam?.Invoke(parameter); _methodToExecute?.Invoke(); } } public class RelayCommand : ICommand where T : class { private readonly Action _methodToExecuteWithParam; private readonly Func _canExecuteEvaluator; public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } public RelayCommand(Action methodToExecute, Func canExecuteEvaluator = null) { _methodToExecuteWithParam = methodToExecute; _canExecuteEvaluator = canExecuteEvaluator; } public bool CanExecute(object parameter) { if (_canExecuteEvaluator == null) return true; return _canExecuteEvaluator.Invoke(parameter as T); } public void Execute(object parameter) { _methodToExecuteWithParam?.Invoke(parameter as T); } } }