こんにちは。エクセルソフトの田淵です。
先日 @matatabi_ux さんとお食事に言って色々教えてもらいました。現在の私の Hot Topic は Interface の設計と Unit Test です。
ということで、明後日 2016/9/7(水) の 日本 Android の会 2016年9月定例会「クロスプラットフォーム開発最前線」で Xamarin の話をするのですが、少し UnitTest も含める予定です。
japan-android-group.connpass.com
定員オーバーですが、キャンセルが出るかもしれませんので、気になる方はご登録をお願いいたします。
Xamarin.Forms で MVVM
前回、Xamarin.Android で作った、左に画像、右の上下にテキストを配置する Custom Adapter にボタンをクリックする度にランダムなデータを追加していく。というサンプルのアプリを作りました。Android 開発の方にはなじみ深いコードなのではないかと思います。
今回は同じ動作をするアプリを Xamarin.Forms で MVVM ライクに作ってみました。これを UnitTest してみたいと思います。その1の本エントリーでは、アプリを作るところまでを記載します。
こんな感じで動きます。
Model
(シングルトンにする意味はないんですが。別のページでも使うかもというテイで。)
INotifyPropertyChanged
を継承して、public event PropertyChangedEventHandler PropertyChanged;
イベントを生やします。
イベントを拾うメソッド
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
も用意します。今回は必要なプロパティが ListView の Binding 対象のコレクションだけなので、ObservableCollection<RamenItem>
しか用意していません。また、ObservableCollection は CollectionChanged
イベントだけ飛んで PropertyChanged
イベントが飛ばない(と聞いた気がする)ので、いつもの変更を取得するゲッターセッターはなしで、単純にゲッターだけにしています。
後は、Items コレクションに追加削除する AddItem()
と DeleteItem()
のメソッドを用意します。このメソッド内で手動で PropertyChanged イベントを発火しています。
そのため、上記メソッドは今回は使いません。(コレクションの数とかをプロパティに持っていれば必要になりますね。)
Model 全体としてはこんな感じです。
ViewModel と View
VM と View はいつもの通りな感じですが、今回は VM 側で Model のコレクションを操作しないため、VM のプロパティにそのまま Model のコレクションを渡しています。
private ObservableCollection<RamenItem> _items = Ramen.Instance.Items; public ObservableCollection<RamenItem> Items { get { return _items; } set { if (_items != value) { _items = value; OnPropertyChanged(); } } }
これで、Model の変更がそのまま VM で処理せずとも自動で View まで反映されます。ModelのPropertyChangedを拾う場合は、VM でコメントしたコードを利用する感じでしょうか。
サンプルプロジェクト
このサンプルアプリのプロジェクトは以下にアップしました。
次のエントリーでは このアプリを UnitTest してみたいと思います。こちら。
Xamarin 気になった方は
是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソース や JXUG リンクページ に参考資料を纏めてますので併せてどうぞ。
Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)
Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。
私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)、Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。
以上です。