BaseCommand.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Input;
  4. namespace FWindSoft.MVVM
  5. {
  6. public class BaseCommand:ICommand
  7. {
  8. private Action<object> m_Execute;
  9. private Predicate<object> m_CanExecute;
  10. public BaseCommand(Action<object> execute, Predicate<object> canExecute)
  11. {
  12. this.m_Execute = execute;
  13. this.m_CanExecute = canExecute;
  14. }
  15. public virtual bool CanExecute(object parameter)
  16. {
  17. return this.m_CanExecute == null || this.m_CanExecute(parameter);
  18. }
  19. public virtual event EventHandler CanExecuteChanged
  20. {
  21. add { System.Windows.Input.CommandManager.RequerySuggested += value; }
  22. remove { System.Windows.Input.CommandManager.RequerySuggested -= value; }
  23. }
  24. public virtual void Execute(object parameter)
  25. {
  26. if (this.m_Execute != null)
  27. {
  28. this.m_Execute(parameter);
  29. }
  30. }
  31. public void RaiseExecuteChanged()
  32. {
  33. //不完善
  34. //EventHandler handler = CanExecuteChanged;
  35. //if (handler != null)
  36. // handler(this, new EventArgs());
  37. }
  38. }
  39. public class CommandManager
  40. {
  41. private readonly Dictionary<string,BaseCommand> m_Commands=new Dictionary<string,BaseCommand>();
  42. public void RegisterCommand(string name,BaseCommand baseCommand)
  43. {
  44. m_Commands[name] = baseCommand;
  45. }
  46. public void RegisterCommand(string name, Action<object> execute, Predicate<object> canExecute)
  47. {
  48. m_Commands[name] = new BaseCommand(execute, canExecute);
  49. }
  50. public BaseCommand GetCommand(string name)
  51. {
  52. BaseCommand command;
  53. m_Commands.TryGetValue(name, out command);
  54. return command;
  55. }
  56. public void RemoveCommand(string name)
  57. {
  58. m_Commands.Remove(name);
  59. }
  60. public void ClearCommand()
  61. {
  62. m_Commands.Clear();
  63. }
  64. }
  65. }