| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Input;namespace OpenSEMI.ClientBase.Command{    public class BaseCommand<T> : ICommand    {        #region Fields        readonly Action<T> _execute = null;        readonly Predicate<T> _canExecute = null;        #endregion // Fields        #region Constructors        public BaseCommand(Action<T> execute)            : this(execute, null)        {        }        /// <summary>        /// Creates a new command.        /// </summary>        /// <param name="execute">The execution logic.</param>        /// <param name="canExecute">The execution status logic.</param>        public BaseCommand(Action<T> execute, Predicate<T> canExecute)        {            if (execute == null)                throw new ArgumentNullException("execute");            _execute = execute;            _canExecute = canExecute;        }        #endregion // Constructors        #region ICommand Members        public bool CanExecute(object parameter)        {            return _canExecute == null ? true : _canExecute((T)parameter);        }        public event EventHandler CanExecuteChanged        {            add            {                if (_canExecute != null)                    CommandManager.RequerySuggested += value;            }            remove            {                if (_canExecute != null)                    CommandManager.RequerySuggested -= value;            }        }        public void Execute(object parameter)        {            _execute((T)parameter);        }        #endregion // ICommand Members    }    public class BaseCommand : ICommand    {        #region Fields        readonly Action _execute;        readonly Func<bool> _canExecute;        #endregion // Fields        #region Constructors        /// <summary>        /// Creates a new command that can always execute.        /// </summary>        /// <param name="execute">The execution logic.</param>        public BaseCommand(Action execute)            : this(execute, null)        {        }        /// <summary>        /// Creates a new command.        /// </summary>        /// <param name="execute">The execution logic.</param>        /// <param name="canExecute">The execution status logic.</param>        public BaseCommand(Action execute, Func<bool> canExecute)        {            if (execute == null)                throw new ArgumentNullException("execute");            _execute = execute;            _canExecute = canExecute;        }        #endregion // Constructors        #region ICommand Members        public bool CanExecute(object parameter)        {            return _canExecute == null ? true : _canExecute();        }        public event EventHandler CanExecuteChanged        {            add            {                if (_canExecute != null)                    CommandManager.RequerySuggested += value;            }            remove            {                if (_canExecute != null)                    CommandManager.RequerySuggested -= value;            }        }        public void Execute(object parameter)        {            _execute();        }        #endregion    }}
 |