命令第一個用途是將語義以及調用命令的對象與執行命令的邏輯分離開來。
WPF 命令中的四個主要概念:
WPF 中的路由命令模型可以分為四個主要概念:命令、命令源、命令目標以及命令綁定:
命令是要執行的操作。
命令源是調用命令的對象。
命令目標是在其上執行命令的對象。
命令綁定是將命令邏輯映射到命令的對象。
WPF 中的命令是通過實現 ICommand 接口創建的。ICommand 的 WPF 實現是 RoutedCommand 類。
WPF 中的主要輸入源是鼠標、鍵盤、墨跡和路由命令。更加面向設備的輸入使用 RoutedEvent 來通知應用程序頁中的對象已發生了輸入事件。
ICommand接口只要是用於綁定Button等的點擊事件,當數據改變的時候,會做出一些相應的通知,
當繼承ICommand接口后,下面的方法則需要實現,它們之間的關系如圖所示:
代碼如下:
1 class manage:ICommand 2 { 3 public bool CanExecute(object parameter) 4 { 5 throw new NotImplementedException(); 6 } 7 8 public event EventHandler CanExecuteChanged; 9 10 public void Execute(object parameter) 11 { 12 throw new NotImplementedException(); 13 } 14 }
當界面上有此類事件發生時,它會通知所有的 RoutedCommand 發生 CanExecutedChanged 事件。
這時,已經綁定了這些 RoutedComamnd 的 CommandSource (主要是各類控件),會調用 RoutedCommand 的 CanExecute 方法來檢測是否可執行,並根據返回的結果來設置自己的狀態。如,當返回可執行時,作為 CommandSource 的按鈕則會設置自己的 IsEnabled 屬性為 true。此時,如果用戶“點擊”了這個 CommandSource 時,它會調用它所綁定的 RoutedCommand 的 Execute 方法。
在vm中command的綁定代碼如下:
1 <Button Content="登陸" Grid.Column="1" Height="24" HorizontalAlignment="Left" Margin="15,18,0,0" Name="button1" VerticalAlignment="Top" Width="89" Command="{Binding login}" />