前回の続きです。 MenuItemのIEnumerableをContextMenuのItemsSourceに バインドすることで一応狙った通りに動作したのですが、 ViewModelにコントロールのMenuItemが入るのはどうも気持ち悪いので、 違う方法を考えてみます。 まず、メニュー項目を定義したPOCO(ContextMenuItemDefinitionクラス)の IEnumerableをContextMenuのItemsSourceにバインドします。 ContextMenuItemDefinitionクラスは、とりあえず項目名(Text)を定義しておきます。 #!C# public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent();Read More →

Windows Phone ToolkitのContextMenuのサンプルコードでは #!XML <toolkit:ContextMenuService.ContextMenu> <toolkit:ContextMenu> <toolkit:MenuItem Header=”Item1″/> <toolkit:MenuItem Header=”Item2″/> <toolkit:MenuItem Header=”Item3″/> </toolkit:ContextMenu> </toolkit:ContextMenuService.ContextMenu> というように、MenuItemで明示的にメニュー項目を定義している場合をよく見ます。 今回、以下の条件を満たすためにContextMenuのItemsSourceを使う方法を試していましたが、 すっかりはまっていたので、その過程をまとめてみます。 ListBoxの各要素をTap&Holdすることでコンテキストメニューを表示させる 複数の画面から利用されるため、ListBoxと付随するコントロールをUserControlとしてまとめる コンテキストメニューを画面によって変更する必要があるRead More →

2011/4/30の開発メモから WP7の標準のApplicationBarはSilverlightの要素でない(FrameworkElementでない)ため、 選択されたときの処理をViewModelのコマンドではなく、Viewのコードビハインドに記述する必要があります。 今開発しているWP7アプリはMVVMパターンにできる限り沿うようにしているため、 なんとかViewModelのコマンドとして処理を記述できないか調べていたのですが、ここに バインド可能なApplicationBarのラッパーが公開されていました。 How to have binding on the ApplicationBar ApplicationBarを持ったラッパークラスにDependencyPropertyを持たせることで、 プロパティをバインド可能にするアイデアです。 これを使ってViewModelのコマンドでメニュー選択時の処理を記述できるようになったのですが、 Blendで"Cannot clear the iconRead More →

Expression Blend 4のSketchFlow、標準ではWPFとSilverlightしか対応していません。 Windows Phone 7のSketchFlowは、こちらのサイトで配布されているテンプレートをインストールすると利用できます。 Using SketchFlow for Windows Phone Prototyping インストール方法は"How to install the template"に書かれているように、 ダウンロードしたZIPファイルをドキュメントフォルダで展開するだけです。 その前にブロックの解除をお忘れなく。 Blendを起動すると以下のようにWindowsRead More →