dev evening - monotouch, monodroid, mvvm mvvmcross and databinding

59
@slodge Cross Platform Mobile C#, Mvvm and DataBinding WP7 Android iPhone iPad Win 8

Upload: stuart-lodge

Post on 07-May-2015

8.809 views

Category:

Technology


2 download

DESCRIPTION

Talk at DevEvening about MonoTouch, MonoDroid, WP7 and WinRT development - especally using mvvmcross

TRANSCRIPT

Page 1: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Cross Platform MobileC#, Mvvm and DataBinding

WP7AndroidiPhone

iPadWin 8

Page 2: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

@slodge

Page 3: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

http://bit.ly/mvvmcross

Page 4: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Coming up…

• C# Cross Platform• An Mvvm Introduction• Some Code: TwitterSearch• Some Extras• Q&A

Page 5: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Mobile C#

Page 6: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Why C#?

• You already have:– skills– tools– code

• “low level” – compiles– testable– quick

• Enables native look and feel on all platforms• Generics, Linq, Async and the future…

Page 7: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

What you need – WP7:

• A Windows 7 PC• Free Tools or better!• AppHub account $99• A phone sometimes helps…

Page 8: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

What you need - Android:

• Windows PC or a Mac• Free Tools• Play account $25• A phone really helps…• Mono 4 Android $400

Page 9: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

What you need - iOS:

• An Intel-based Mac• Account-Linked Tools• iOS Account $99• A phone often helps…• MonoTouch - $400

Page 10: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Getting Started Links…

Page 11: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

MVVM

Page 12: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Mvvm Basics

View

ViewM

odel

Model

get/set Propertiescall Commands

notify changessome messaging

Whatever C# you like!

ViewView

ViewM

odelView

Model

ModelM

odel

Page 13: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

• Properties• INotifyPropertyChanged• INotifyCollectionChanged• Data Binding• IValueConverter• ICommand• UI Thread

MVVM Technical Details

Page 14: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Mvvm Benefits

• The “normal” reasons:– Separation of concerns– Designability (Blendability)– Testability

• The MvvmCross reason:– Cross platform code reuse

Page 15: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Mvvm Cross Platform

View

ViewM

odel

Model

SharedPlatform Specific

get/set Propertiescall Commands

notify changessome messaging

Whatever C# you like!

ViewView

ViewM

odelView

Model

ModelM

odel

Page 16: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Some longer introductions…

Page 17: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

TwitterSearch

Page 18: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

What we want to build…

Home Page: Result Page:

Page 19: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

The “core” code

Page 20: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

The Model and Service

STOLEN

From @ColinEberhardt

Page 21: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

HomeViewModel

Page 22: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

TwitterViewModel

Page 23: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Navigation

• The HomeViewModel calls:

• Which means the TwitterViewModel gets created with:

Page 24: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

The clients

Page 25: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Some Unit Tests

Page 26: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

A Console App

Page 27: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

A WP7 App

Page 28: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

An Android App

Page 29: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

iPhone App

Page 30: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

iPad App

Page 31: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Windows 8 Metro App

Page 32: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside…

Page 33: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside WP7 App…

• No C#, just XAML with {Binding}• Binding syntax includes:

{Binding Path, Converter=Converter, ConverterParameter=Parameter, Mode=Mode,

FallbackValue=Fallback}

Page 34: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside Android App…

• No C#, just xml with MvxBind attributes

• MvxBind syntax is JSON based on XAML structure.

Page 35: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Binding – Xaml versus Mvx

WP7:

Text=“{Binding SearchText,Mode=TwoWay}”

Android:

local:MvxBind=“{‘Text’:{‘Path’:’SearchText’,’Mode’:’TwoWay’}

}”

Page 36: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Binding – Xaml versus MvxWP7:

Text=“{Binding Timestamp,Converter={StaticResource

TimeAgo}}”

Android:

local:MvxBind=“{‘Text’:{‘Path’:’Timestamp’,Converter’:’TimeA

go’}}”

Page 37: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside iPhone App

• UI is drawn in XML using Xcode• XIB is linked to C# classes using MonoTouch• Binding is declared in C# using JSON

Page 38: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Creating the XIB…

Page 39: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside iPad App

• The iPad App is actually the iPhone App – “Universal”

• But the UI is different – take advantage of the larger screen.

• Achieved in code: IMvxTouchViewPresenter

Page 40: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside Windows 8 Metro App…

Page 41: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside Windows 8 Metro App…

It’s like WP7….• No C#, just XAML with {Binding}

• ValueConverters are used in Bindings• Lists are filled using ItemsSource

• BUT: Navigation is achieved through code – not Xaml Uri’s

Page 42: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside Windows 8 Metro App

Warnings:• MvvmCross WinRT implementation is

“first cut”– e.g. differences in ViewModel lifecycle

• Under-the-hood Win8 implementation is native code – there are big differences.– differences in XAML– differences in .Net/C#

• Everything is async.

Page 43: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Inside Windows 8 Metro App…

• Beyond the warnings – look at the numbers!

Page 44: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Recap

Page 45: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

TwitterSearch recap…

• Shared C# Core– ViewModels– Models– Services– Converters– Tests

• UIs are “mostly XML/JSON”

Page 46: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

SomeExtras

Page 47: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Page 48: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Panoramas, Pivots and Tabs

• Tabbed navigation is another common metaphor across phones and across ipads too.

• Generally speaking think of each “tab” as a sub-ViewModel.

Page 49: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Jump Lists

• Use grouped list on each viewmodel…

• Each platform then works out its own format

Page 50: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Dependency Injection

• Useful for testing• Essential for injecting platform specific services – e.g:– Camera capture– GPS services– NFC

• MvvmCross wraps OpenNetCF DI – adds some extension methods:– RegisterServiceInstance<TService>(instance)– RegisterServiceType<TService, TServiceType>()– GetService<TService>()

Page 51: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Native Types

• Sometimes #define is necessary…• Personally, I try to use interfaces and DI

wherever possible.

Page 52: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

i18n

• Choices:– Each platform has their own localisation format

available.– Xamarin are supporting .resx files…– MvvmCross provides a .json file mechanism– Or write your own

Page 53: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Blendability

• Limited support available right now.• It’s relatively easy to integrate your own

design time ViewModelLocator with design time data…

Page 54: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Problems?

• WinRT – issues…• Xcode designer - OMG• iOS development and debugging is most

painful• Some compiler differences – JIT• Multiple “core” project files annoying – and

breaks refactoring• MvvmCross still changing

Page 55: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

That’sall folks

Page 56: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

That’s all folks…

Hopefully we covered:• C# Cross Platform• An Mvvm Introduction• Some Code: TwitterSearch• Some Extras

There might be time for:• Q&A

Page 57: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

@slodge

Page 58: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

http://bit.ly/mvvmcross

Page 59: Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding

@slodge

Alternatives: http://bit.ly/rrnLDT