MVVM

AppBarUtils

ApplicationBar自体はBlend4でデザイン支援を受けることができる標準のクラスを使用する ApplicationBarButton、ApplicationBarMenuItemも同様 上記アイテムのClickイベントに対応するトリガ、コマンドを用意する この方針で実装することにしたのだが、参考…

ジレンマ

Windows Phone 7標準のApplicationBarの弱点を補完するための別な実装をいろいろと調べていたが、残念なことに満足に使えるものは見つからなかった。 ApplicationBarの実装自体は先日紹介したPhone7.Fxを初めいくつかあるのだが、やはり PhonePage.Applicati…

設定画面 その4

あとは必要なイベント発生時にこれらのコマンドを明示的に実行すればOKだ。 次は実際の画面と組合わせて処理を完成させてみよう。 今回は今までの仕上げとして、実際に画面を用意して設定値をロード/セーブしてみよう。 設定画面 動作確認するだけなので、以…

設定画面 その3

さて、設定画面の設定値をロード/セーブする処理だが昨日はViewModelに直接組込んで使う例を考えてみた。今日はViewModelには組込まず、コマンドとして実装することを考えてみよう。まずはIsolatedStorageSettingsのIO処理を組込んだコマンドクラスを作ろう…

設定画面 その2

とシンプルな構成。あとはAppSettingsクラスを好きな画面のコントロールにデータバインドするだけと簡単だ。 殆どがルーティーンなので、これも他のコード同様にもう少しスマートに書けないかを考えてみよう。 ということで考えて見たが、すぐに出てくるのは…

設定画面

環境や各種諸元値のオプションを設定する画面はモバイルアプリケーションでよく使われる。なのでAndroidプラットホームなどはそのための専用のActivityクラスであるPreferenceActivityを提供しており、データの永続先として使用するXMLと共に使うことで簡単…

ToggleSwitch.Contentのローカライズ

提供されているリソースを上書きしてデータテンプレートを使ってかなり面倒なことをやるのかな、と思ったのだが存外簡単だった。 ローカライズ用のリソースを用意する 状態二値である"On"と"Off"をキーに持つリソースを用意する。取り敢えずインバリアントと…

NotifyOnValidationErrorBehavior修正

先日公開したNotifyOnValidationErrorBehaviorクラスだが、複数のコントロールがそれぞれ違うBrushを使っていると対応できない。(テストしていないことがばればれだ)なので、Controlに対応するBrushを格納する辞書を利用するように修正してみた。 NotifyOnVa…

INotifyDataErrorInfoメモ

以下はまだメモ。後でもう少しちゃんとまとめる。INotifyDataErrorInfoはSilverlight 4で追加された新しいバリデーションメカニズムのためのインタフェースであり、それまでの標準的なバリデーションでは困難だった、・一度の検証で複数のエラー返すことがで…

自作ビヘイビアを作ろう その2

せっかくなのでよく使いそうなビヘイビアをもう一つ書いてみた。 NotifyOnValidationErrorBehavior クラス public class NotifyOnValidationErrorBehavior : Behavior<FrameworkElement> { private static readonly Brush _errorBrush = new SolidColorBrush(Colors.Red); priv</frameworkelement>…

自作ビヘイビアを作ろう

Blend4でプログラミングできる部品として使うビヘイビア。組込みのものを使うのは勿論良いのだが、作るのが非常に簡単なので自分の欲しいビヘイビアを思いついたらばんばん作って良いと思う。以下、ビヘイビアを作る手順。 System.Windows.Interactivity.Beh…

生成したViewModelとバリデーション その4

バリデート属性の型をPropertyDeclで指定して、それを元にプロパティに属性を記述する方法にはちょっと無理があった 例)必須で尚かつ、桁数が20桁以内であること [RequiredAttribute( ErrorMessage="名前は必須です" )] [StringLengthAttribute(20)] public …

生成したViewModelとバリデーション その2

さて属性ベースのバリデーションとだが、バリデーションに使う属性はSystem.ComponentModel.DataAnnotationsネームスペース下に既に存在しており、基本的なバリデーションはこれを利用することで殆ど事足りてしまうだろう。 System.ComponentModel.DataAnnot…

生成したViewModelとバリデーション

今までのおさらいになるが、T4 Templateと属性のおかげで、簡単な属性をメタデータとして与えることでフル装備のViewModelを簡単に自動生成できるようになった。 MyViewModel.cs (メタデータを設定する生成元) using System; using Mandarine.MVVM.Annotatio…

MessageBoxの表示結果でコマンドを実行する処理をBlend 4から実装する

昨日はExpression Blend 4でMessageBoxを表示するコマンドを、組込みのビヘイビアである EventTriggerとそのアクションであるInvokeCommandActionを使って実装した。では、以下のようなよくある処理は同様の方法で可能だろうか。1. MessageBoxを表示する 2. …

MessageBoxの表示をBlend 4から実装する

System.Windows.MessageBoxはXAMLではサポートしていないので通常はコードビハインドから書く。 コードビハインドに書くMessageBox Page1.xaml.cs (抜粋) private void button_Click(object sender,RoutedEventArgs e) { MessageBoxResult result= MessageBo…

ViewModelにバリデーションを組込む

MVVMに直接は関係ないかもしれないが、GUIアプリケーションを書く場合にはスマートなバリデーションは絶対に必要だ。WindowsPhone7でのバリデーションは基本的には例外が投じられた際に発生するBindingValidationErrorイベントをコードビハインドなどで捕捉…

T4 Text TemplateによるViewModelクラスの生成 その5

さて少し空いてしまったが、残った処理をテンプレートに実装していこう。前回はクラスの定義部までを生成した。 MyViewModel_Generated.cs (自動生成結果) using System; using System.Windows; using System.Windows.Controls; using System.ComponentModel…

T4 Text TemplateによるViewModelクラスの生成 その4

前回は属性(アノテーション)の定義が出来たので、話をテンプレートに戻そう。次に行うのはこの属性をマーカとして使い、生成対象のクラスを見つけることだ。1. ソリューション中のプロジェクトを列挙する 2. プロジェクト中のクラス情報を列挙する 3. Proper…

T4 Text TemplateによるViewModelクラスの生成 その3

さて、ViewModelの自動生成の続きだ。おさらいになるが、自動生成するViewModelは対象のネームスペース、クラスを決定しなくてはならない。そして生成するプロパティ(名前、型、デフォルト値)を決めたい。そのためにはテンプレート(ジェネレータ)側に何らか…

T4 Text TemplateによるViewModelクラスの生成 その2

前回のエントリで書いた通り、T4 Text TemplateによるViewModelの生成のためのジェネレータを作成していく。なお、テンプレート自身はViewModelGenerate.ttという名前とし、共通で使うであろう関数群はUtil.ttという別な名前のテンプレートに定義して、ViewM…

T4 Text TemplateによるViewModelクラスの生成

さて、T4 Text TemplateによりJava APTとほぼ同様のことができることが解ったので、早速プロセッサ(というかジェネレータ)を作ることにしよう。実装の手順は以下のようになるだろう。1. Visual Studio ソリューション情報から全てのプロジェクト情報を列挙 2…

ViewModelの自動生成を考える

以前、Androidアプリで恒常的に使用するXMLからPOJO DTOへマッピングするクラスをAPT(Annotation Processing Tool)を利用して自動生成するエントリを書いたことがある。APTでテンプレートメソッドパターンを生成する その1 APTでテンプレートメソッドパター…

ViewModel

Silverlight4の制限はあるものの、MVVMの実装において重要な責務を担うコマンドバインディングが実現できることが解ったので、次はデータバインディングが実現できるかどうか検証してみよう。 といってもデータバインディング機構そのものはWindowsPhone7で…

RelayCommand

WPF のための MODEL-VIEW-VIEWMODEL (MVVM) デザイン パターン - MSDN マガジン February 2009MVVMパターンで使用するコマンドの実装を考えた場合、いろいろなやり方を考えることができると思うが、コマンドの機能毎にICommandの実装を用意する煩雑さとそも…

Windows Phone 7とコマンドバインディング

WPF/SilverlightはデータバインディングによりViewとViewModel、ViewModelとModel、互いの疎結合を保ったままでデータの同期を可能にしている。データバインディングそのものは古のWindowsFormsから実装されており知っているのだが、WPF/SilverlightはMVVMを…