using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Input; namespace AttachedCommandBehavior { /// /// Implements the ICommand and wraps up all the verbose stuff so that you can just pass 2 delegates 1 for the CanExecute and one for the Execute /// public class SimpleCommand : ICommand { /// /// Gets or sets the Predicate to execute when the CanExecute of the command gets called /// public Predicate CanExecuteDelegate { get; set; } /// /// Gets or sets the action to be called when the Execute method of the command gets called /// public Action ExecuteDelegate { get; set; } #region ICommand Members /// /// Checks if the command Execute method can run /// /// THe command parameter to be passed /// Returns true if the command can execute. By default true is returned so that if the user of SimpleCommand does not specify a CanExecuteCommand delegate the command still executes. public bool CanExecute(object parameter) { if (CanExecuteDelegate != null) return CanExecuteDelegate(parameter); return true;// if there is no can execute default to true } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } /// /// Executes the actual command /// /// THe command parameter to be passed public void Execute(object parameter) { if (ExecuteDelegate != null) ExecuteDelegate(parameter); } #endregion } }