ぱっと見無さそうに見えた!
ということで、Prismの中を見てみたらApplicationBarButtonCommandというものがあるじゃないですか。これは使える!?と思ってみたら使い方がわからない。素直に言うとApplicationBarIconButtonにApplicationBarButtonCommandというビヘイビアーをぽとっと落とせば良さそうだと思ってたんですが、どうも違うらしい。
どうやって、ボタンとコマンドを結びつけているのか気になってソースを追いかけてみると、以下のようなコードになってました。
this.binding = new ClickCommandBinding( this.AssociatedObject.ApplicationBar.FindButton(this.ButtonText), (ICommand)this.commandBindinglistener.Value, () => this.parameterBindinglistener.Value);
FindButtonは何かというと、PrismのApplicationBarExtensionsに定義されている以下のような拡張メソッドでした。
public static ApplicationBarIconButton FindButton(this IApplicationBar appBar, string text) { if (appBar == null) throw new ArgumentNullException("appBar"); return (from object button in appBar.Buttons select button as ApplicationBarIconButton).FirstOrDefault(btn => btn != null && btn.Text == text); }
つまり、ApplicationBarのテキストをもとに探してくるみたいです。ということで、ApplicationBarButtonCommandの使い方は以下の手順になります。
- ApplicationBarにApplicationBarIconButtonを置きます
- PhoneApplicationPageにApplicationBarButtonCommandを置きます
- ApplicationBarIconButtonのTextプロパティとApplicationBarButtonCommandのButtonTextプロパティの値を合わせます
- ApplicationBarButtonCommandのCommandBindingプロパティとCommandParameterプロパティを適当に設定します(普通はViewModelあたりのCommandとバインドしますね)
これで、ApplicationBarのボタンとViewModelのコマンドを紐づけることができます。テキストと一致してないとダメという点がいまいちいけてないですね・・・。