using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace GummingCommon { public class DelegateCommand : ICommand { public static List ButtonInfo = new List(); #region ICommand realization [DebuggerStepThrough] public bool CanExecute(object parameter) { return _canExecute == null ? true : _canExecute(parameter); } private event EventHandler _internalCanExecuteChanged; public event EventHandler CanExecuteChanged { add { _internalCanExecuteChanged += value; CommandManager.RequerySuggested += value; } remove { _internalCanExecuteChanged -= value; CommandManager.RequerySuggested -= value; } } public void Execute(object parameter) { ButtonInfo.Add(string.Format("{0}|{1}|{2}", _execute.Method.DeclaringType.Namespace, _execute.Method.DeclaringType.Name, _execute.Method.Name)); _execute(parameter); RaiseCanExecuteState(); } #endregion readonly Action _execute; readonly Predicate _canExecute; public DelegateCommand(Action execute) : this(execute, null) { } public DelegateCommand(Action execute, Predicate canExecute) { if (execute == null) throw new ArgumentNullException("RelayCommand argument can not be null!"); _execute = execute; _canExecute = canExecute; } public void RaiseCanExecuteState() { if (_canExecute != null) OnCanExecuteChanged(); } protected virtual void OnCanExecuteChanged() { EventHandler eCanExecuteChanged = _internalCanExecuteChanged; if (eCanExecuteChanged != null) eCanExecuteChanged(this, EventArgs.Empty); } } }