本文主要介紹WinForm項目中如何像WPF一樣優雅的使用Command來實現業務操作。想必大家已經疲於雙擊控件生成事件處理方法來實現業務操作,如多控件(按鈕、菜單、工具條、狀態欄等命令控件)來做同一個動作,還要控制它們啟用(Enabled)狀態等等,使代碼結構冗長且可讀性差。下面具體介紹和實現WinForm中對Command的應用。
最後附上委托命令(DegelateCommand)的實現。
1 /// <summary> 2 /// 表示一個可被執行委托的方法的命令。 3 /// </summary> 4 public sealed class DelegateCommand : Command 5 { 6 private Action<object> execute; 7 private Func<object, bool> canExecute; 8 /// <summary> 9 /// 初始化 <see cref="DelegateCommand"/> 新實例。 10 /// </summary> 11 /// <param name="execute">當命令被調用時,指定的方法。</param> 12 /// <param name="canExecute">當命令被確定是否能執行時,執行的方法。</param> 13 public DelegateCommand(Action<object> execute, Func<object, bool> canExecute = null) 14 { 15 this.execute = execute; 16 this.canExecute = canExecute; 17 } 18 /// <summary> 19 /// 定義用於確定此命令是否可以在其當前狀態下執行的方法。 20 /// </summary> 21 /// <param name="parameter">此命令使用的數據。 如果此命令不需要傳遞數據,則該對象可以設置為 null。</param> 22 /// <returns>如果可以執行此命令,則為 true;否則為 false。</returns> 23 public override bool CanExecute(object parameter) 24 { 25 if (canExecute == null) 26 { 27 return true; 28 } 29 return canExecute(parameter); 30 } 31 32 /// <summary> 33 /// 定義在調用此命令時調用的方法。 34 /// </summary> 35 /// <param name="parameter">此命令使用的數據。 如果此命令不需要傳遞數據,則該對象可以設置為 null。</param> 36 public override void Execute(object parameter) 37 { 38 if (CanExecute(parameter)) 39 { 40 execute(parameter); 41 } 42 } 43 } DelegateCommand 代碼
補充:不好意思,忘記附上Demo示例,現補上,請前往 百度網盤 下載
本文如有纰漏,歡迎大家批評指正!