using System; using System.Windows.Input; namespace MyMediaCollection.ViewModels { public class RelayCommand : ICommand { private readonly Action action; private readonly Func canExecute; public RelayCommand(Action action) : this(action, null) { } public RelayCommand(Action action, Func canExecute) { if (action == null) throw new ArgumentNullException(nameof(action)); this.action = action; this.canExecute = canExecute; } public bool CanExecute(object parameter) => canExecute == null || canExecute(); public void Execute(object parameter) => action(); public event EventHandler CanExecuteChanged; public void RaiseCanExecuteChanged() => CanExecuteChanged?.Invoke(this, EventArgs.Empty); } }