xamarin+mvvmcross のあれこれ

Post on 08-Aug-2015

130 Views

Category:

Software

10 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Xamarin + MVVMCross

のあれこれ

第 5 回 Japan Xamarin User Group Conference 大阪2015/07/11

青柳臣一 @ShinichiAoyagi

自己紹介 青柳臣一

@ShinichiAoyagi

職業 : ソフトウエア開発(大阪 淀屋橋) Xamarin + ASP.NET MVC/Web API ( C# ) + WPF ( C# ) WPF ( C# )、 Windows Froms ( VB ) iOS ( Objective-C )、 Android ( Java )

MVVMCross

MVVM をサポートするライブラリ https://github.com/MvvmCross/MvvmCross

MVVM 以外にも便利な機能あり

Xamarin 専用というわけではない

MVVM

Model – View - ViewModel 「見た目」と「データ」と「連結部」

ビューiOS

ビューWinPhon

e

ビューAndroid

ビューWPF

ビューモデル モデル

MVVMCross を使いはじめる NuGet でインストール

全部のプロジェクトに ちょっと修正

App1.Core → App1 iOS

AppDelegate.cs 変更 Main.storyboard を消す

Android MainActivity.cs を消す

Windows Phone App.xaml.cs を変更

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()

がんばってる

データバインディング ビューモデル

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!"; }); }}

データバインディング .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();

データバインディング .Droid

axml に書く

<EditText ~略~    local:MvxBind="Text Hello" /><TextView ~略~    local:MvxBind="Text Hello" /><Button ~略~ local:MvxBind="Click ClickCommand"/>

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());

プラグイン (2)

コードでよく使うのにプラットフォームで違うものたち ブラウザー起動

メール起動 ファイルアクセス Sqlite

その他にもいろいろ https://

github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins

Mvx.Resolve<IMvxWebBrowserTask>().ShowWebPage("http://yahoo.co.jp/");

MvxViewModel

ビューの遷移 ShowViewModel<TViewModel>(new { id = “..”, flag = true });

ViewModel でpublic void Init(string id, bool flag){

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

プラグインはこの仕組み

MVVMCross の闇 iOS のストーリーボードは?

MvxTouchViewsContainer を継承してごにょごにょすればできた

モーダルなウインドウは? ViewPresenter とかごにょごにょすればできた

Xamarin.Forms は? Setup.cs とか MvxViewModelViewTypeFinder とか

ViewPresenter とかいろんなものをごにょごにょすればできた

MVVMCross

わかりにくいところもあるけど便利なところもおおいよ(個人の感想です)

top related