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
<Window x:Class="sample.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 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
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 の フォロー」 お願いします!!