Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... ·...

31
MvvmCross Building Native Cross-Platform Apps Martijn van Dijk github.com/martijn00 speakerdeck.com/martijn00 @mhvdijk [email protected] 1

Transcript of Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... ·...

Page 1: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

MvvmCrossBuilding Native Cross-Platform Apps

Martijn van Dijkgithub.com/martijn00speakerdeck.com/martijn00

@[email protected]

1

Page 2: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Progress is teamwork

2

Page 3: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

The history ofMvvmCross

3

Page 4: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Started by Stuart Lodge

Started as fork of MonoCross (Mvc framework)

November 2012

4

Page 5: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Evolved into MvvmCross

Taken over by

● Tomasz Cielecki / Cheesebaron

● Martijn van Dijk / Martijn00

+ Many others

June 2013

5

Page 6: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Android support added

June 2015

Xamarin.Forms added

August 2015

Plugin structure added

September 2015

6

Page 7: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

iOS supportadded

February 2016 And more in the future!

7

Page 8: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

WhyMvvmCross?

8

Page 9: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

9

Cross platform awesomeness!

Support for all major platforms

Most advanced Mvvm library for Xamarin and

.NET cross platform

Page 10: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

10

Large and engaged community

Fast release cycle

Clean & easy conventions

Page 11: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

11

Page 12: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

I love MvvmCross

I am really impressed

with MvvmCross

Miguel de IcazaXamarin CTO

Scott HanselmanMicrosoft Developer

Evangelist

12

Page 13: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Why Mvvm?

View Binder ViewModel Model

Button

Text

1. Action

1. Action

3. Command

5. Notify change

6. Change data

4. Access data

2. Event handling

13

Page 14: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

MvvmCross Supported platforms

■ Android■ iOS■ Windows■ Xamarin.Forms■ Mac

14

Page 15: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

MvvmCross Highlights

■ Flexible architecture■ PCL based■ Inversion of Control■ Dependency injection

■ Value Converters■ Bindings■ Testable■ Plugins

15

Page 16: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

■ Github.com/MvvmCross■ MvvmCross.com■ Slack (#mvvmcross)■ Stackoverflow■ Xamarin Forums

MvvmCross Resources

16

Page 17: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Let take a look at setting up a basic project

17

Page 18: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Bindings

iOS:

var set = this.CreateBindingSet<MainViewController, MainViewModel>();set.Bind(Label).To(vm => vm.Title);set.Apply();

Android:

local:MvxBind="Text Title"

18

Page 19: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Presenters

Specifications

■ Customize view presentation■ Platform-specific■ Still retain View Model logic■ Presentation hints

Examples

■ Tabs / Panorama■ Split View / Master-Detail■ Fragments■ Modals■ Hamburger menu

19

Page 20: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

■ Accelerometer■ Download Cache■ Email■ File■ Json■ Localization■ Location

Plugins available athttps://github.com/MvvmCross/MvvmCross-Plugins

■ Messenger■ Phone Call■ Picture Chooser■ SQLite■ Visibility■ Web Browser + Many More!

20

MvvmCross Plugins

Page 21: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Messengerpublic class LocationViewModel : MvxViewModel { private readonly MvxSubscriptionToken _token;

public LocationViewModel(IMvxMessenger messenger) { _token = messenger.Subscribe<LocationMessage>(OnLocationMessage); }

private void OnLocationMessage(LocationMessage locationMessage) { Lat = locationMessage.Lat; Lng = locationMessage.Lng; } } 21

Page 22: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Generics

■ MvvmCross uses CoC (Convention over Configuration) by default- LoginView > LoginViewModel

■ Generics can be used too- LoginView : MvxActivity<LoginViewModel>- MainView : MvxActivity<SomeDifferentNameViewModel>

■ Possible to override in setup.cs- protected override IDictionary<Type, Type>

GetViewModelViewLookup()22

Page 23: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

IoC (Inversion of Control)

1. Use interfaces2. Define implementation of interfaces at runtime3. Job done! :)

■ Singleton: Mvx.RegisterSingleton<T>();■ Lazy: Mvx.ConstructAndRegisterSingleton<T>();■ Dynamic: Mvx.RegisterType<T>();

Mvx.Resolve<T>();23

Page 24: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Dependency Injection

public class MyViewModel : MvxViewModel { public MyViewModel(IMvxJsonConverter jsonConverter, IMvxGeoLocationWatcher locationWatcher) { // Do stuff.... } }

24

Page 25: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

See it in action,demo time!

25

Page 26: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Material Design support for MvvmCross

■ Design- NavigationView- FloatingActionButton

■ AppCompat- android:Theme- Toolbar- DrawerToggle

■ V4- DrawerLayout- SwipeRefresh- ViewPager (FragmentStatePager)

■ LeanBack■ Preference

- Compat Fragments■ Fragging

- V4 Fragments- MvxCachingFragmentActivity

■ RecyclerView- ItemTouchHelper for Xamarin

26

Page 27: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Other Material &Android support libraries

■ Cardview■ Pallete■ Gridlayout■ Mediarouter■ V8 Support

■ V13 Support■ Annotations support■ Custom tabs■ Percent support■ Recommendation support

27

Page 28: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Testingusing MvvmCross.Test.Core;using Moq;using NUnit.Framework;

[TestFixture]public class MyTest : MvxIoCSupportingTest{ [Test] public void TestViewModel() { base.Setup(); // from MvxIoCSupportingTest

// your test code }} 28

Page 29: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Tips

■ Keep it simple■ Separation of Concerns■ Don’t try to invent the wheel

again, use plugins, samples, etc.

■ Use the Analysis plugin to fix common mistakes

29

Page 30: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Get help on Slack

xamarinchat.herokuapp.com #MvvmCross channel

Follow influencers#MvvmCross

@Mhvdijk@Cheesebaron@MvvmCross

Join the LinkedIn group

linkedin.com/groups/8456977MvvmCross & Xamarin group

Contribute on Github

github.com/MvvmCross/MvvmCross

30

Get involved!

Page 31: Martijn van Dijk - Microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... · 2016-03-18 · Martijn van Dijk / Martijn00 + Many others June 2013 5. Android support added

Questions?Martijn van Dijk

github.com/martijn00speakerdeck.com/martijn00

@[email protected]

31