martijn van dijk - microsoftxamarinuniversity.blob.core.windows.net/guestlectures/m... ·...
TRANSCRIPT
![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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/1.jpg)
MvvmCrossBuilding Native Cross-Platform Apps
Martijn van Dijkgithub.com/martijn00speakerdeck.com/martijn00
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/16.jpg)
■ 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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/20.jpg)
■ 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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.co/reader030/viewer/2022040404/5e908d1d76ccd339766b3fa5/html5/thumbnails/31.jpg)
Questions?Martijn van Dijk
github.com/martijn00speakerdeck.com/martijn00
31