CommandAdapter.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. namespace FWindSoft.MVVM
  5. {
  6. public class CommandAdapter
  7. {
  8. public object Tag { get; set; }
  9. /// <summary>
  10. /// 自定义事件BeforeCommand
  11. /// </summary>
  12. public event EventHandler<CommandEventArgs> BeforeCommand;
  13. /// <summary>
  14. /// 自定义事件AfterCommand
  15. /// </summary>
  16. public event EventHandler<CommandEventArgs> AfterCommand;
  17. /// <summary>
  18. /// 在命令执行之前执行的方法
  19. /// </summary>
  20. /// <param name="args"></param>
  21. public void DoBeforeCommand(CommandEventArgs args)
  22. {
  23. EventHandler<CommandEventArgs> handler = this.BeforeCommand;
  24. if (handler != null)
  25. handler(this, args);
  26. }
  27. /// <summary>
  28. /// 在命令执行之后执行的方法
  29. /// </summary>
  30. /// <param name="args"></param>
  31. public void DoAfterCommand(CommandEventArgs args)
  32. {
  33. EventHandler<CommandEventArgs> handler = this.AfterCommand;
  34. if (handler != null)
  35. handler(this, args);
  36. }
  37. internal List<BaseCommand> m_Commands = new List<BaseCommand>();
  38. public IEnumerable<BaseCommand> Commands { get { return m_Commands; } }
  39. /// <summary>
  40. /// 刷新所有的命令
  41. /// </summary>
  42. public void RefreshAllCommands()
  43. {
  44. foreach (BaseCommand itemCommand in Commands)
  45. {
  46. itemCommand.RaiseExecuteChanged();
  47. }
  48. }
  49. EventHandler m_RequerySuggested;
  50. /// <summary>
  51. /// 注册事件
  52. /// </summary>
  53. public CommandAdapter()
  54. {
  55. m_RequerySuggested = new EventHandler(CommandManager_RequerySuggested);
  56. System.Windows.Input.CommandManager.RequerySuggested += m_RequerySuggested;
  57. }
  58. void CommandManager_RequerySuggested(object sender, EventArgs e)
  59. {
  60. RefreshAllCommands();
  61. }
  62. }
  63. }