Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Prism.Formsについて

23,293 views

Published on

Xamarin版Prismについての紹介です

Published in: Technology
  • Be the first to comment

Prism.Formsについて

  1. 1. Prism.Formsついて 2016/5/7 JXUGC #13 東京 緊急開催 Xamarin のすべて! 大田 一希
  2. 2. 自己紹介 • 名前/SNS • 大田 一希(かずき) • Twitter: @okazuki • Blog • かずきのBlog@hatena http://blog.okazuki.jp/ • その他 • Microsoft MVP for Windows Development • ReactiveProperty https://github.com/runceel/ReactiveProperty • Xamarin初心者です • Love UWP and WPF
  3. 3. お約束事項 • 記載の内容は個人の見解であり、所属する企業を代表するものではあり ません。
  4. 4. 今日のゴール • 近い未来にXamarin.Formsで開発するときにPrismを候補に上げてもらえ れば万歳
  5. 5. 日本時間5/6にアップデートがありました(つらい)
  6. 6. Prismとは
  7. 7. Prismとは • Microsoft Pattern & Practicesチームで開発さ れたComposite Application Library for WPF というライブラリ • 現在はMicrosoft MVPが中心となったチームに 移管されて開発継続中 • WPF, Silverlight, Windows store app, UWPな どXAMLファミリーに対応してきた • Xamarin.FormsにもPrism.Formsという名前で 対応中 (現在Preview版がリリースされている)
  8. 8. Prism.Formsの特徴 • MVVMパターンをサポート • ViewModelでの画面遷移イベントの補足(NavigatedTo, NavigatedFrom) • ViewModelでの画面遷移、ダイアログ表示(INavigationService、 IPageDialogService) • ViewとViewModelの自動紐づけ(命名規約[カスタマイズ可能]による紐づけ) • INotifyPropertyChangedの実装クラスの提供 • ICommandの実装クラスの提供 • DIコンテナ(Unity)と連携 • Modelクラスインスタンス管理とかクラスの組み立てとかめんどくさいことは丸投げ出来る • DependencyServiceからのインスタンスの取得のサポート • 以下のプラットフォームをサポート • Android, iOS, Windows sotre app, Windows Phone, UWP (要はXamarin.Formsが動けば動く)
  9. 9. Hello world
  10. 10. 険しい道のり • Xamarin.Formsのライブラリの依存関係(Andorid)が割とすぐ壊れる • NuGetから再インストールで解決できるけど心臓に悪い
  11. 11. Hello world • AndroidのプロジェクトからXamarin.FormsとSupport関連のライブラリを 消しておく • Prism.Unity.FormsをNuGetから追加
  12. 12. Hello world • Appクラスの基本クラスをPrismApplicationに変更 • 抽象メソッドをオーバーライド • Views名前空間にMainPage.xamlを作成 • App#RegisterTypesでPageを登録 • App#OnInitializedで画面遷移
  13. 13. Hello world(ViewModel追加) • ViewModels名前空間にMainPageViewModelを追加 • 以下の記述をMainPage.xamlに追加 • xmlns:Prism=“clr-namespace:Prism.Mvvm;assembly=Prism.Forms” Prism:ViewModelLocator.AutowireViewModel=“True” • 適当にMainPageViewModelのプロパティを作ってViewとBinding
  14. 14. ちょっとめんどくさいよね • 安心してください。プロジェクトテンプレートがあります。 • 拡張機能でPrismで検索
  15. 15. プロジェクトテンプレート • Prism/Formsというカテゴリに以下のものが追加されます • Prism Unity App (Forms) • Hello world相当の内容が設定済み。 • 2016/5/7現在、1バージョン古いPrism.Formsを参照しているのでNuGetの 更新が必要
  16. 16. Demo
  17. 17. 機能紹介
  18. 18. MVVM関連 • ViewModelの基本クラスの提供 • BindableBaseクラス 以下のように書くと変更通知プロパティが定義可能
  19. 19. MVVM関連 • ICommandの実装クラスの提供 • DelegateCommandクラス ExecuteとCanExecuteをデリゲートで渡して定義する • ObservsPropertyでCanExecuteの発火タイミングのプロパティを指定可能
  20. 20. MVVM関連 • ViewModelでの画面遷移 • ページは、AppクラスのRegisterTypesメソッドで登録する • RegisterTypeForNavigation<TPage>()メソッドを使用
  21. 21. MVVM関連 • ViewModelでの画面遷移 • INavigationServiceをViewModelで受け取り使用可能 • コンストラクタでINavigationService navigationServiceという引数を定義すること でUnityからインジェクションされる
  22. 22. MVVM関連 • ViewModelでの画面遷移 • NavigationService#NavigateAsync(string pageName)で画面遷移可能 • “MainPage”でMainPageに画面遷移 • “HogehogePage/FogafugaPage”のようにすることでページを入れ子にすることが 可能 • 例:NavigationPage内で画面遷移させる等が可能
  23. 23. MVVM関連 • ナビゲーションのイベント捕捉 • INavigationAwareインターフェースの提供 ViewModelに実装するとNavigatedTo, NavigatedFromが画面遷移時に呼ばれ るようになる
  24. 24. MVVM関連 • ViewとViewModelの紐づけ • ViewModelLocator.AutowireViewModel=“True”で紐づけの有効化 • 命名規約(カスタマイズは可能) Views/HogePage -> ViewModels/HogePageViewModel
  25. 25. MVVM関連 • ViewModelでダイアログを出すことも可能 • IPageDialogServiceインターフェースをコンストラクタで受け取ることで使用可能 • DisplayAlert, DisplayActionSheetメソッドでダイアログが表示可能
  26. 26. DIコンテナ • UnityというDIコンテナと連携可能 • インスタンスのライフサイクルの管理と組み立てを任せることができる • DependencyServiceからのインスタンス取得の自動化 • DependencyService.Get<T>()で取得できるインスタンスを自動でインジェクションしてくれる
  27. 27. Demo 画面遷移してみよう
  28. 28. まとめ
  29. 29. まとめ • PrismはMVVMを支援するライブラリ • View/ViewModelの紐づけ • 画面遷移系 • ダイアログ • MVVMでよく使う基本クラス • DIコンテナもついてくる • プロジェクトテンプレートをつかおう
  30. 30. まとめ • まだまだPreviewですが、基本機能のそろったライブラリになりそうです。 あたたかい目で見守ってやってください。

×