ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

コマンドの作り方と使い方がわからない

WPFのコマンドの話です。

そもそもWPFのコマンドとは

イベントハンドラーを抽象化したようなもの、みたいです。操作対象と操作元を特定しない、意味的に抽象化された作業の塊です。
たとえばコピー、貼り付けといった作業は、メニューから選んでポチポチやったり、ボタンを押したり、キーボードショートカットで行ったりすることができます。コピーする対象もテキストだったり文字列だったりしますし、貼り付ける先はテキストエディターだったりペイントソフトだったりします。操作方法はもとより、対象と操作元で挙動は変わりますが、「コピーする」「貼り付ける」というレベルまで抽象化すれば「同じこと」をしているといえます。これを実装したのがコマンドというわけです。マイクロソフトは親切にもコピー&ペーストや、ナビゲーションに関するコマンドはすでに用意してくれています。

独自のコマンドを実装する

これはそれほど難しくありません。ICommandインターフェースを実装すればいいのです。自分で作ったコマンドクラスを実装したクラスのインスタンスを、例えばボタンのCommandプロパティにバインドすれば、ボタンを押したときにコマンドを実行することができます。

public class MyCommand : ICommand
{
    public void Execute(object param) { }
    public bool CanExecute(object param) { }
    public event EventHandler CanExecuteChanged;
}

※中身は作りましょう。

問題はその先に

ボタンを押したら動くのはいいですね。ではキーボードのバインディングはどうするんでしょう。同じコマンドをキーボードの入力にバインドするにはどうするのでしょうか…これはちょっと悩ましいところですね。InputGestureプロパティを設定するといいらしいですが、ここはまだわかりません。この辺をうまく実装できるとより一層ビューとデータを疎結合にできるんですけど…