2013年06月02日

WPFサンプル:RoutedCommandでカスタムコマンドを実装する

   このエントリーをはてなブックマークに追加 Clip to Evernote
ICoomandの実装サンプルを載せましたが、今度はRoutedCommandを使った例です。
まずは、実行例を。

RoutedCommand1
RoutedCommand2
RoutedCommand3


MainWindowクラスに、HelloExecuted、GoodEveningExecuted、CanExecuteメソッドを実装します。
前回とやっていることはほぼ同じです。
HelloExecuted、GoodEveningExecutedはボタンが押されたときに呼び出されるメソッドです。
このサンプルでは、2つのボタンを用意し、別の動作をさせたかったので、このようにしています。
この3つのメソッドでは、可能な限り引数で渡された値を参照し処理を書くようにします。
MainWindowのフィールドプロパティは参照しないようにすることで、メソッドの独立性を高めるようにします。


XAMLで定義したメソッドをボタンと結び付けるのですが、間にRoutedComamndという仲介用のオブジェクトを使うことになります。
XAMLを示します。


ICommandの時のように、別クラスを定義しそこにHelloExecuted、GoodEveningExecuted、CanExecuteを実装したかったのですが、そのやり方がわかりませんでした。
そうしたいのならば、ICommandを実装せよ、ということですかね。
  

Posted by gushwell at 23:00Comments(0)TrackBack(0)

2013年05月28日

WPFサンプル:ICommand インターフーイスを実装してカスタムコマンドを作成する

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回は、標準のコマンドを使う例をお見せしましたが、ICommandインターフェースを実装すれば独自のコマンドクラスを作成することができます。ICommandインターフェースには、ExecuteとCanExecuteの2つのメソッドと、CanExecuteChangedイベントが定義されています。

ここでは、MessageBoxを表示するだけの簡単なコマンドを作成してみます。


このMyCommandを使ったXAMLを示します。


Commandプロパティには、Window.Resourcesで定義したMyCommandをバインドし、CommandParameterには、TextBoxで入力されたTextプロパティをバインドしています。
ボタンが押されると、MyCommandのExecuteメソッドが呼ばれます。
引数には、textBox1.Textの値が渡ってきます。
MainWindow.Xaml.csにはコードを追加する必要はありません。

実行結果です。
TextBoxに何らかの文字列が入力されているときだけ、ボタンが有効になっているのが確認できます。

ICommand1 Icommand2 ICommand3
  
Posted by gushwell at 23:00Comments(0)TrackBack(0)

2013年05月26日

WPFサンプル:標準のコマンドを使う

   このエントリーをはてなブックマークに追加 Clip to Evernote
WPFでは、プレゼンテーション層から何かの機能を呼び出す目的のために、イベントハンドラとは別に、「コマンド」という仕組みを用意しています。コマンドを使うと、イベントハンドラよりも、ロジックと見た目の結合度を低くすることができます。コマンドの例として代表的なものは、「コピー」、「切り取り」、「貼り付け」、「開く」、「印刷」などがあります。

標準のコマンドを使った簡単なサンプルを書いてみました。

まずはXAMLです。


このサンプルでは、ApplicationCommands.Cut、ApplicationCommands.Copy、ApplicationCommands.Paste、ApplicationCommands.Openを使っています。

Cut, Copy, Pasteでは、コマンドが実行できない状況では、メニュー項目は自動的に無効になります。TextBoxコントロールにはCopyコマンド等を処理するためのロジックが組み込まれているため、特別なコードを書かなくても、Commandを指定するだけで機能するようになります。

ApplicationCommands.Openでは、CommandBindingを使い、Executeプロパティで、Commandとイベントハンドラを結び付けています。
CommandBinding CanExecuteプロパティは、コマンドが実行できるかどうかを判断するメソッドと結び付けます。
ここでは、C#のコードで、無条件に trueを返していますが、falseを返せば、関連しているコントロールがDisable状態になります。

C#のコードを以下に示します。
ApplicationCommands.Openと関連づけられたOpenCmdExecutedメソッドでは、OpenFileDialogを使い、ユーザが指定したファイルを読み込み、TextBoxに表示しています。


実行時のスクリーンショットです。

StandardCommand1

StandardCommand2

この他にも、 ApplicationCommands、NavigationCommands、MediaCommands、EditingCommands、ComponentCommands など多くのコマンドが定義済みです。詳細はMSDNを参照してください。  
Posted by gushwell at 22:30Comments(0)TrackBack(0)