prism for windows runtime入門

38
Prism for Windows Runtime 入入入入入入 2013/7/6 入入入入入入 (15:25-16:05) @okazuki 入入

Upload: -

Post on 21-Dec-2014

4.242 views

Category:

Documents


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Prism for windows runtime入門

Prism for Windows Runtime入門してみた

2013/7/6 めとべや東京 (15:25-16:05)@okazuki大田 一希

Page 2: Prism for windows runtime入門

自己紹介

大田一希– Microsoft MVP for ClientAppDev 2011/07-2014/06– 富士通アドバンストエンジニアリング

 お仕事は「 Java EE6 」、 Windows 8

– Twitter: @okazuki– ブログ:かずきの Blog@hatenahttp://d.hatena.ne.jp/okazuki

本書いてます– Windows 8 ストア アプリ開発入門– Windows ストア アプリ開発のレシピ 110

Page 3: Prism for windows runtime入門

犬紹介

Twitter や Blog アイコンの犬はデール– 15 歳で死亡– 雑種

Twitter や Facebook でよく言ってる犬はアンセム– 9 歳(現役)– ミニチュアダックス– 昨日持病の腰痛でダウン

Page 4: Prism for windows runtime入門

お約束

掲載内容は私自身の見解であり、所属する組織を代表するものではありません

Page 5: Prism for windows runtime入門

今日のセッションの目標

新しい Windows ストア アプリを作るときに普通のテンプレートではなく Prism for Windows Runtime を使おうかなと思ってもらう

Page 6: Prism for windows runtime入門

Prism for Windows Runtimeとは

以降 Prism for WinRT

Page 7: Prism for windows runtime入門

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 に足りない部分を補う

Page 8: Prism for windows runtime入門

Prism for WinRT

MVVM パターンのサポート– ページ (View) と ViewModel のマッピング機能– ViewModel でのページのライフサイクルへ対応– ICommand インターフェースの実装 DelegateCommand を提供

非同期なメソッドからの DelegateCommandの作成とかしてくれる

Windows Runtime 固有の機能のサポート– ページ遷移履歴の保存– サスペンド時の状態保存– フライアウト

一般的なアプリに必要な機能のサポート– 入力値の検証– 疎結合な連携のためのイベントの発行と購読( EventAggregator)

Page 9: Prism for windows runtime入門

MVVM サポート

VisualStateAwarePageクラス( View)– Prism for WinRTの画面用基本クラス( LayoutAwarePageのようなもの)

ViewModelクラス( ViewModel)– ページ遷移のコールバックメソッド– NavigationServiceを使うことで ViewModelで画面遷移の処理が可能に– サスペンド時に状態の一時保存と停止状態からの状態復元

BindableBase( Model)– INotifyPropertyChangedの実装

ValidatableBindableBase ( Model)– プロパティの値の検証機能の実装

ViewModelLocatorクラス( Viewと ViewModelの接続)– Viewのクラス名から自動的に ViewModelを生成して DataContextに設定

Page 10: Prism for windows runtime入門

WinRT 固有の機能のサポート

VisualStateAwarePage + NavigationService– 画面遷移履歴– ページ(と ViewModel )の状態保存・復元

フライアウト– 何故標準にないのか不思議なフライアウトのサポート

設定チャームのコマンドのサポート

検索チャームのサポート

Page 11: Prism for windows runtime入門

Prism for WinRT の起動処理

MvvmAppBase クラス– INavigationService の初期化

画面遷移– ISessionStateService の初期化

セッションデータの保存– IFlyoutService の初期化

何故か標準でサポートされてないフライアウト

– 利用者は OnLaunchApplication メソッドをオーバーライドしてお膳立てされた状態で開発がスタートできる

Page 12: Prism for windows runtime入門

Prism for WinRT とは まとめ

MVVM + Windows ストア アプリ固有機能 + α = Prism for WinRT

MVVM– ViewModel, DelegateCommand, ViewModelLocator

ストアアプリ固有機能– 画面遷移– サスペンド時の処理への対応– 何故か標準でサポートされてないフライアウト

α– 入力値の検証– ゆるふわな相互通信( EventAggregator 今回は時間の都合で…)

Page 13: Prism for windows runtime入門

Prism for WinRT を使ってみよう

Page 14: Prism for windows runtime入門

ちょっとめんどくさい…

App クラスの親クラスを MvvmAppBase に変更

Page クラスの親クラスを VisualStateAwarePage に変更

etc...

– 参考: Prism for WinRT入門 Hello world

Page 15: Prism for windows runtime入門

テンプレート

Prism for Windows Runtime Templateshttp://visualstudiogallery.msdn.microsoft.com/e86649de-2b5e-45bb-bc65-5c6499b92b34– 拡張機能と更新プログラムから Prism で検索でも OK

Page 16: Prism for windows runtime入門

プロジェクトテンプレート

プロジェクトテンプレート– PrismApp

シンプルな Prism を使ったアプリを作るためのひな形– PrismApp using UnityModel や ViewModel のインスタンスの管理を Unity(ゲームじゃないほう ) で行うためのひな形

Page 17: Prism for windows runtime入門

アイテムテンプレート (1/2)

アイテムテンプレート– Flyout View (Prism), Flyout View Model (Prism)

フライアウト用の View と ViewModel のテンプレート– Model (Prism)

値の検証を行う機能を持ったクラス– Page View (Prism), View Model (Prism)

ViewModel と接続されたページと ViewModel のテンプレート

Page 18: Prism for windows runtime入門

アイテムテンプレート (2/2)

アイテムテンプレート– PubSubEvent (Prism)

EventAggregator で発行 / 購読できるイベントを作る– Search Contract (Prism)

検索結果のページ+ MvvmAppBase の OnSearchApplication をオーバーライド

– UserControl View (Prism) 普通のユーザーコントロール。存在意義がわからない。

Page 19: Prism for windows runtime入門

新規作成したアプリの基本構造

超シンプルApp.xaml

MvvmAppBase継承エントリポイント : OnLaunchApplication

MainPage.xamlVisualStateAwarePage継承

MainPageViewModel.csViewModel継承

NavigationService で遷移

ViewModelLocator で接続

Page 20: Prism for windows runtime入門

画面遷移

MvvmAppBase クラスの NavigationService プロパティを使う– MvvmAppBase の OnLaunchApplication メソッドがエントリポイン

– 文字列“ Main” → Views 名前空間の” Main”Page クラスがページ

Page 21: Prism for windows runtime入門

View と ViewModel の接続

ViewModelLocator.IsAutoWiredViewModel=“True” が肝

– MainPage クラス → ViewModels 名前空間の“ MainPage”ViewModelが DataContext に設定される

Page 22: Prism for windows runtime入門

規約のカスタマイズも可能

画面名のクラス名の規約– MvvmAppBase クラスの Type GetPageType(string pageToken) を

オーバーライド

ViewModel のクラス名の規約– ViewModelLocator の SetDefaultViewTypeToViewModelResolver(Func<Type, Type> viewTypeToViewModelTypeResolver) で設定

規約ではなく個別設定も可能– デフォルトのコンストラクタ以外で ViewModel をインスタンス化したい場合はこれがお手軽

– ViewModelLocator.Register( typeof(MainPage).ToString(), () => new MainViewModel(NavigationService));

Page 23: Prism for windows runtime入門

あとは育てていく

Views 名前空間にページを増やす

ViewModels 名前空間に対応する ViewModel を増やす

Models 名前空間にアプリケーションの肝を作りこむ

Page 24: Prism for windows runtime入門

まとめ

テンプレートを使おう

MvvmAppBase の OnLaunchApplication がエントリポイント

MvvmAppBase の NavigationService で画面遷移

規約を覚えよう– Main -> Views.MainPage– MainPage -> ViewModels.MainPageViewModel– カスタマイズもできることを覚えておこう

あとは育てる!

Page 25: Prism for windows runtime入門

How to ...

色々やりたいこと別に

Page 26: Prism for windows runtime入門

画面遷移したいんです

MvvmAppBase クラスの NavigationService プロパティを使おう– ViewModel のインスタンス化の時に渡すのが綺麗

– ViewModel から遷移処理を書く

HubPage へ遷移

Page 27: Prism for windows runtime入門

画面遷移時の処理がしたいんです

ViewModel の OnNavigateFrom/To をオーバーライド

Page 28: Prism for windows runtime入門

サスペンド時の対応がしたいです その1

ViewModel のプロパティに RestoreableStateAttributeをつけましょう

Page 29: Prism for windows runtime入門

サスペンド時の対応がしたいです その2

ページの状態の保持は SaveState メソッド、復元にはLoadState メソッドを使いましょう

ViewModel は、その1の属性による方法か NavigateTo, NavigateFrom で行いましょう。

– 参考: Prism for WinRTでGridViewのスクロール位置を記録する

Page 30: Prism for windows runtime入門

入力値の検証がしたいです

ValidatableBindableBase を継承した Model を作りましょう– プロパティに System.ComponentModel.DataAnnotations をつけ

– 参考: Prism for WinRTのValidatableBindableBase

Page 31: Prism for windows runtime入門

フライアウトを出したいです

FlyoutView を作りましょう必要に応じて FlyoutViewModel を作って接続しましょう– 閉じる処理や、設定チャームに戻る処理などは ViewModel に用意され

ます– フライアウトの表示は MvvmAppBase クラスの FlyoutService クラス

の ShowFlyout(string flyoutId) で行います

– 参考: Prism for WinRTでフライアウトを出したい

Page 32: Prism for windows runtime入門

ViewModel の生成を楽したいです (1/2)

一定数の規模を超えてくると View と ViewModel の紐づけが大変– ViewModelLocator.Register(View 名 , () => ViewModel 生成

処理 );– デフォルトコンストラクタでよければ、↑はいらないけどそんな単純に物事はすすまない

UnityContainer などの DI コンテナに処理を任せましょう– Prism app using Unity をもとにアプリを作る

Page 33: Prism for windows runtime入門

ViewModel の生成を楽したいです (2/2)

App クラスの中身が以下のようになる

View/ViewModel が増えても App クラスが

肥大化しない。

Page 34: Prism for windows runtime入門

まとめ

Page 35: Prism for windows runtime入門

Prism for Windows Runtime

MVVM + WinRT + α– ViewModel, VisualStateAwarePage, DelegateCommand, Flyout, etc...

プロジェクトテンプレート / アイテムテンプレートを使おう– Prism for Windows Runtime Templateshttp://visualstudiogallery.msdn.microsoft.com/e86649de-2b5e-45bb-bc65-5c6499b92b34

標準のテンプレートよりはいけてる– Enterprise向けだけじゃなく、一般向けでも使いやすい。

Page 36: Prism for windows runtime入門

今回はなしてない機能もあります

EventAggregator– 祖結合なイベントでのやり取り

SearchPane– 検索コントラクトの表示とか

設定コントラクト– 設定コントラクトにコマンドを簡単に置けます

認証情報の保存– 安全な場所へのパスワードなどのばれたらいけない情報を保存できます

Page 37: Prism for windows runtime入門

おまけ

Windows 8.1 Preview では…– 検索コントラクトの動きちげー– 画面のスナップ・フィル・ポートレイト・ランドスケープがなくなった

(幅と高さとかから自分で最適な見た目を制御するっぽい)– そもそもプロジェクトテンプレートの中身がちげー– API めっちゃ増えとる

キャッチアップして Blog りたいのでよろしくお願いします

Page 38: Prism for windows runtime入門

参考情報

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