C#:WinForm之Command,
本文主要介紹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示例,現補上,請前往 百度網盤 下載
本文如有纰漏,歡迎大家批評指正!