WPF で利用される Command(コマンド) に関して簡単なまとめを記載します。 コマンドは操作を分離したもので、関連するオブジェクトに コマンド ソース、コマンド および コマンド と 実装 を結びつける コマンド バインディング があります。 (他にもありますが…ここでは割愛します。。) 以下ではこれらを簡単に紹介します。
目次
コマンド ソース
コマンド を実行できる(ICommand.Execute を実行できる)画面上の要素(GUI上のオブジェクト)を表します。 コマンド ソース は ICommandSource インターフェイス を実装し、xaml 上で コマンドの実態 と 引数 を設定できます。 定義済みの コマンド ソース は4種類あり、基本的には クリック で指定された コマンド が実行されます。 以下のリストでは継承先もあわせて記載しています(すべて調べきれているか分かりませんが…)。
ICommandSource
プロパティ
- ICommand Command { get; }
- Object CommandParameter { get; }
- IInputElement CommandTarget { get; }
定義済み コマンド ソース
- ButtonBase
- Button
- CalendarButton
- CalendarDayButton
- ToggleButton
- CheckBox
- RadioButton
- Button
- MenuItem
- Hyperlink
- InputBinding
コマンド
実行される コマンド を表現します。 コマンドは意味を定義するもので実装は定義しません。 定義済みコマンドも中身の実装がありません。 コマンド と その実装 はこの後に記載する コマンド バインディング で関連付けます。
ICommand
イベント
- event CanExecuteChanged
メソッド
- bool CanExecute(object parameter)
- void Execute(object parameter)
定義済 コマンド
- ApplicationCommands
- NavigationCommands
- MediaCommands
- EditingCommands
- ComponentCommands
コマンド バインディング
コマンドとその実装を接続します。 以下では ApplicationCommands.Close を MainView.CommandBinding_Executed と関連付ける xaml と実装のサンプルを記載します。
MainView.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | < Window x:Class = "sample.MainView" Title = "Sample WPF Application" > < Window.CommandBindings > < CommandBinding Command = "ApplicationCommands.Close" Executed = "CommandBinding_Executed" CanExecute = "CommandBinding_CanExecute" /> </ Window.CommandBindings > < StackPanel > < Button Command = "ApplicationCommands.Close" Content = "Close" /> </ StackPanel > </ Window > |
MainView.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | namespace sample { using System.Windows; using System.Windows.Controls; using System.Windows.Input; public partial class MainView : Window { public MainView() { this .InitializeComponent(); } private void CommandBinding_Executed( object sender, ExecutedRoutedEventArgs e) { this .Close(); } private void CommandBinding_CanExecute( object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = true ; } } } |
参考記事
- MVVM入門 その1「シンプル四則演算アプリケーションの作成」
- かずきのBlog - [C#][WPF]コマンドですよ その8 「用意されてるコマンド」
- MSDN - コマンド実行の概要
- MSDN - ICommandSource インターフェイス
- MSDN - ICommand インターフェイス
- MSDN - CommandBinding クラス
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!