Prism for windows runtime入門2. 自己紹介
? 大田一希
– Microsoft MVP for ClientAppDev 2011/07-2014/06
– 富士通アドバンストエンジニアリング
お仕事は「Java EE6」、Windows 8
– Twitter: @okazuki
– ブログ:かずきのBlog@hatena
http://d.hatena.ne.jp/okazuki
? 本書いてます
– Windows 8 ストア アプリ開発入門
– Windows ストア アプリ開発のレシピ110
7. Prism
? patterns & practices チームの作ってるXAML系 platform
の開発を行うためのライブラリ
– Prism 4.1
? WPF 4.0, Silverlight 5 and Windows Phone 7.1
– 複合型アプリケーションの作成を目的
– 画面にRegionと呼ばれる領域を定義して、そこに色んなところから画面を流し込む
– モジュール間の連携, DIコンテナとの連携, etc…
– 途中からMVVMパターンをサポート
– よくも悪くも複雑化…
– Prism for WinRT
? Windows ストア アプリのためのPrism
– シンプルにMVVM+現在のWindows Runtimeに足りない部分を補う
8. Prism for WinRT
? MVVMパターンのサポート
– ページ(View)とViewModelのマッピング機能
– ViewModelでのページのライフサイクルへ対応
– ICommandインターフェースの実装DelegateCommandを提供
? 非同期なメソッドからのDelegateCommandの作成とかしてくれる
? Windows Runtime固有の機能のサポート
– ページ遷移履歴の保存
– サスペンド時の状態保存
– フライアウト
? 一般的なアプリに必要な機能のサポート
– 入力値の検証
– 疎結合な連携のためのイベントの発行と購読(EventAggregator)
9. MVVMサポート
? VisualStateAwarePageクラス(View)
– Prism for WinRTの画面用基本クラス(LayoutAwarePageのようなもの)
? ViewModelクラス(ViewModel)
– ページ遷移のコールバックメソッド
– NavigationServiceを使うことでViewModelで画面遷移の処理が可能に
– サスペンド時に状態の一時保存と停止状態からの状態復元
? BindableBase(Model)
– INotifyPropertyChangedの実装
? ValidatableBindableBase(Model)
– プロパティの値の検証機能の実装
? ViewModelLocatorクラス(ViewとViewModelの接続)
– Viewのクラス名から自動的にViewModelを生成してDataContextに設定
11. Prism for WinRTの起動処理
? MvvmAppBaseクラス
– INavigationServiceの初期化
? 画面遷移
– ISessionStateServiceの初期化
? セッションデータの保存
– IFlyoutServiceの初期化
? 何故か標準でサポートされてないフライアウト
– 利用者はOnLaunchApplicationメソッドをオーバーライドしてお膳立て
された状態で開発がスタートできる
12. Prism for WinRTとは まとめ
? MVVM + Windows ストア アプリ固有機能 + α =
Prism for WinRT
? MVVM
– ViewModel, DelegateCommand, ViewModelLocator
? ストアアプリ固有機能
– 画面遷移
– サスペンド時の処理への対応
– 何故か標準でサポートされてないフライアウト
? α
– 入力値の検証
– ゆるふわな相互通信(EventAggregator今回は時間の都合で…)
15. テンプレート
? Prism for Windows Runtime Templates
http://visualstudiogallery.msdn.microsoft.com/e8664
9de-2b5e-45bb-bc65-5c6499b92b34
– 拡張機能と更新プログラムからPrismで検索でもOK
17. アイテムテンプレート(1/2)
? アイテムテンプレート
– Flyout View (Prism), Flyout View Model (Prism)
? フライアウト用のViewとViewModelのテンプレート
– Model (Prism)
? 値の検証を行う機能を持ったクラス
– Page View (Prism), View Model (Prism)
? ViewModelと接続されたページとViewModelのテンプレート
18. アイテムテンプレート(2/2)
? アイテムテンプレート
– PubSubEvent (Prism)
? EventAggregatorで発行/購読できるイベントを作る
– Search Contract (Prism)
? 検索結果のページ+MvvmAppBaseのOnSearchApplicationをオーバーライド
– UserControl View (Prism)
? 普通のユーザーコントロール。存在意義がわからない。
22. 規約のカスタマイズも可能
? 画面名のクラス名の規約
– MvvmAppBaseクラスのType GetPageType(string pageToken)を
オーバーライド
? ViewModelのクラス名の規約
– ViewModelLocatorのSetDefaultViewTypeToViewModelResolver(
Func<Type, Type> viewTypeToViewModelTypeResolver)で設定
? 規約ではなく個別設定も可能
– デフォルトのコンストラクタ以外でViewModelをインスタンス化したい場
合はこれがお手軽
– ViewModelLocator.Register(
typeof(MainPage).ToString(),
() => new MainViewModel(NavigationService));
35. Prism for Windows Runtime
? MVVM + WinRT + α
– ViewModel, VisualStateAwarePage, DelegateCommand, Flyout,
etc...
? プロジェクトテンプレート/アイテムテンプレートを使おう
– Prism for Windows Runtime Templates
http://visualstudiogallery.msdn.microsoft.com/e86649de-2b5e-
45bb-bc65-5c6499b92b34
? 標準のテンプレートよりはいけてる
– Enterprise向けだけじゃなく、一般向けでも使いやすい。
37. おまけ
? Windows 8.1 Previewでは…
– 検索コントラクトの動きちげー
– 画面のスナップ?フィル?ポートレイト?ランドスケープがなくなった
(幅と高さとかから自分で最適な見た目を制御するっぽい)
– そもそもプロジェクトテンプレートの中身がちげー
– APIめっちゃ増えとる
? キャッチアップしてBlogりたいのでよろしくお願いします
38. 参考情報
? patterns & practices: Prism for the Windows Runtime
– http://prismwindowsruntime.codeplex.com/
? Developing a Windows Store business app using C#,
XAML, and Prism for the Windows Runtime
– http://msdn.microsoft.com/en-
us/library/windows/apps/xx130643.aspx