Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Xamarin+MVVMCross のあれこれ

1.048 visualizaciones

Publicado el

第5回 Japan Xamarin User Group Conference 大阪 「Xamarin+MVVMCross のあれこれ」のセッション資料です。

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Xamarin+MVVMCross のあれこれ

  1. 1. Xamarin + MVVMCross の あれこれ 第5回 Japan Xamarin User Group Conference 大阪 2015/07/11 青柳臣一 @ShinichiAoyagi
  2. 2. 自己紹介  青柳臣一  @ShinichiAoyagi  職業: ソフトウエア開発(大阪 淀屋橋)  Xamarin + ASP.NET MVC/Web API(C#) + WPF(C#)  WPF(C#)、Windows Froms(VB)  iOS(Objective-C)、Android(Java)
  3. 3. MVVMCross  MVVM をサポートするライブラリ  https://github.com/MvvmCross/MvvmCross  MVVM 以外にも便利な機能あり  Xamarin 専用というわけではない
  4. 4. MVVM  Model – View - ViewModel  「見た目」と「データ」と「連結部」 ビュー iOS ビュー WinPhone ビュー Android ビュー WPF ビュー モデル モデル
  5. 5. MVVMCross を使いはじめる  NuGet でインストール  全部のプロジェクトに  ちょっと修正  App1.Core → App1  iOS  AppDelegate.cs 変更  Main.storyboard を消す  Android  MainActivity.cs を消す  Windows Phone  App.xaml.cs を変更
  6. 6. MVVMCross の起動の流れ  iOS  AppDelegate.cs → Setup.cs → Core.App.cs  Android  SplashScreen(MainLauncher=true) → Setup.cs → Core.App.cs  Windows Phone  App.xaml.cs → Setup.cs → Core.App.cs  どれも最後は Mvx.Resolve<IMvxAppStart>().Start() がんばってる
  7. 7. データバインディング  ビューモデル  MvxViewModel を継承する  XAML で書くときと同じ  INotifyPropertyChanged で変更通知 private string hello = "Hello MvvmCross"; public string Hello { get { return this.hello; } set { this.hello = value; RaisePropertyChanged(() => this.Hello); } } public IMvxCommand ClickCommand { get { return new MvxCommand(() => { this.Hello = "Click!"; }); } }
  8. 8. データバインディング.iOS  コードで書く  using Cirrious.MvvmCross.Binding.BindingContext;  インテリセンスのおかげで悪くはない  Set.Bind(control).For(c => c.Text).To(vm => vm.Hello).WithConversion(…); var set = this.CreateBindingSet<FirstView, App1.ViewModels.FirstViewModel>(); set.Bind(label).To(vm => vm.Hello); set.Bind(textField).To(vm => vm.Hello); set.Bind(button).To(vm => vm.ClickCommand); set.Apply();
  9. 9. データバインディング.Droid  axml に書く <EditText ~略~ local:MvxBind="Text Hello" /> <TextView ~略~ local:MvxBind="Text Hello" /> <Button ~略~ local:MvxBind="Click ClickCommand"/>
  10. 10. Color プラグイン  NuGet でプラグインを入れる  これも全部のプロジェクトに  ViewModel  MvxColor を使う  View  データバインド + ValueConverter  iOS: set.Bind(label) .For(c => c.TextColor).To(vm => vm.LabelColor) .WithConversion(new MvxNativeColorValueConverter());  Android: local:MvxBind="Text Hello; TextColor NativeColor(LabelColor)“  XAML: Color="{Binding CurrentColor, Converter={StaticResource NativeColor}}" set.Bind(label).For(c => c.TextColor).To(vm => vm.LabelColor).WithConversion(new MvxNativeColorValueConverter());
  11. 11. プラグイン (2)  コードでよく使うのにプラットフォームで違うものたち  ブラウザー起動  メール起動  ファイルアクセス  Sqlite  その他にもいろいろ  https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins Mvx.Resolve<IMvxWebBrowserTask>().ShowWebPage("http://yahoo.co.jp/");
  12. 12. MvxViewModel  ビューの遷移  ShowViewModel<TViewModel>(new { id = “..”, flag = true }); ViewModel で public void Init(string id, bool flag) { …
  13. 13. Mvx の IoC  基本  登録: Mvx.RegisterSingleton<IFoo>(new Foo());  参照: Mvx.Resolve<IFoo>().Bar();  Cirrious.CrossCore.IoC.MvxTypeExtensions  https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control  プラグインはこの仕組み
  14. 14. MVVMCross の闇  iOS のストーリーボードは?  MvxTouchViewsContainer を継承してごにょごにょすればできた  モーダルなウインドウは?  ViewPresenter とかごにょごにょすればできた  Xamarin.Forms は?  Setup.cs とか MvxViewModelViewTypeFinder とか ViewPresenter とか いろんなものをごにょごにょすればできた
  15. 15. MVVMCross わかりにくいところもあるけど便利なところもおおいよ (個人の感想です)

×