using System;
using System.Collections.Generic;
using System.Windows.Input;
using System.Diagnostics;
using System.Text;

namespace TradeBlotter.Command
{
  public class RelayCommand : ICommand
  {
    readonly Action<object> execute;
    readonly Predicate<object> canExecute;
    public RelayCommand(Action<object> execute)
      : this(execute, null)
    {
    }
    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
      if (execute == null) throw new ArgumentNullException("execute");
      this.execute = execute;
      this.canExecute = canExecute;
    }
    [DebuggerStepThrough]
    public bool CanExecute(object parameter)
    {
      return canExecute == null ? true : canExecute(parameter);
    }
    public event EventHandler CanExecuteChanged
    {
      add
      {
        CommandManager.RequerySuggested += value;
      }
      remove
      {
        CommandManager.RequerySuggested -= value;
      }
    }
    public void Execute(object parameter)
    {
      execute(parameter);
    }
  }
}
