hot tuna cross platform development with.net, xamarin and mvvmcross

35
Hot Tuna CROSS PLATFORM DEVELOPMENT WITH .NET, XAMARIN AND MVVMCROSS

Upload: phyllis-berry

Post on 25-Dec-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Hot TunaCROSS PLATFORM DEVELOPMENT WITH .NET, XAMARIN AND MVVMCROSS

Page 2: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Sean’s Guff Formerly CIO at Catalyst Risk ManagementCurrently unemployed

Personal shareware site atwww.sourceitsoftware.com

Blog atsourceitsoftware.blogspot.com

@seanrcross

[email protected]

Page 3: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

To cover•What are we trying to achieve

•Example

•Theory (boring!)

•Getting started with MvvmCross

•Plugins

•Platform specific stuff

•Summary

•Links

Page 4: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

The holy grail

Page 5: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

What is achievable

Page 6: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Example – Lions Official (sorry)

Page 7: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS
Page 8: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

The pieces•.net (duh)•Xamarin (iOS, Android, Mac)•Portable Class Libraries•MvvmCross

Page 9: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Xamarin•Commercial products for C# development for non-Windows platforms

•Xamarin.Android

•Xamarin.iOS

•Xamarin.Mac

•Need business edition for VS integration @ $999 US each

Page 10: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Xamarin Demo

Page 11: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Portable Class Libraries•Create a single library that can be used by multiple .net frameworks

•Allows access only to functionality shared by all selected frameworks

•Does some nifty namespace mapping

•Makes cross platform development much easier

•Microsoft and 3rd party PCLs available (HttpClient, Imaging, JSON…)

Page 12: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

.net x.x

Portable Class LibraryShared functionality

Silverlight

Page 13: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

.net x.x

Windows Store

Portable Class LibraryShared functionality

Silverlight

Page 14: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

.net x.x

Windows Store

Portable Class LibraryShared functionality

Silverlight

Xamarin.XXXX

Page 15: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

PCL Demo Easy-peasy, lemon squeezy

It’s hard to find a good image of a class library

Page 16: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Mvvm: Model – View Model - Model

Page 17: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Mvvm: Key interfaces•INotifyPropertyChanged• RaisePropertyChanged(() => PropertyName );

•ICommand

•INotifyCollectionChanged (or ObservableCollection)

Page 18: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Mvvm: Binding

Page 19: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

XAML Code

<StackPanel> <TextBox Text="{Binding Hello, Mode=TwoWay}" /> <TextBlock Text="{Binding Hello}" /> <Button Content="Click Me" Command="{Binding MyCommand}" /> <Button Content="Go Second"  Command="{Binding GoSecondCommand}"  /></StackPanel>

public class FirstViewModel  : MvxViewModel{ private string _hello = "Hello MvvmCross";   public string Hello {  get { return _hello; } set { _hello = value; RaisePropertyChanged(() => Hello); } }

   public System.Windows.Input.ICommand MyCommand    {        get        {            return new Cirrious.MvvmCross.ViewModels.MvxCommand(DoMyCommand);        }    }

   private void DoMyCommand()    {        Hello = Hello + " World";    }

    public System.Windows.Input.ICommand GoSecondCommand    {        get        {            return new Cirrious.MvvmCross.ViewModels.MvxCommand(DoGoSecond);        }    }    private void DoGoSecond()    {        ShowViewModel<SecondViewModel>();    }}

Page 20: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

MvvmCross•Cross Platform MVVM Development Framework

•Free, open source

•Supports• WP7,8• WPF• WinRT• Xamarin.Android• Xamarin.iOS• Xamarin.Mac

•AKA Mvx

Page 21: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

MvvmCross Architecture

Page 22: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Using MvvmCross•Hard - download from github, compile, include references etc

•Easy - Nuget; look for MvvmCross Hot Tuna Starter Pack, and plugins

•Real Easy - NinjaCoder

Page 23: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Getting started - Nuget

Page 24: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Getting started - NinjaCoder

Page 25: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Plugins•Convenient way to access platform functionality

•Use NinjaCoder or Nuget to add plugins

•Includes Accelerometer, Email, Files, Location, Messaging, Sqlite

•3rd party plugins available as well.

•Consume plugins using Dependency Injection or Service locator

Page 26: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Plugins Demo

Page 27: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Platform specific code•Describe functionality using an interface in .Core

•Create platform specific implementation in .xxxx

•Register implementation on app startup◦ Mvx.RegisterSingleton<ISettingsPersistance>(new SettingsPersistanceWPF());◦ Mvx.RegisterType<IGetRemoteData, RemoteDataWpf>();

•Consume plugins using Dependancy Injection or Service locator• persistance = Mvx.Resolve<ISettingsPersistance>();

Page 28: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Platform specific example•Here is one that I prepared earlier

Page 29: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Summary•PCLs let you use easily share code across multiple platforms

•Xamarin lets you use C# on Android, iOS and Mac

•MvvmCross wraps it all up to make it easy• Shared PCL that holds most functionality• Platform specific apps for views and dependant code

•Plugins let you easily add functionality in a cross platform friendly way

•Do your own platform dependant stuff using interfaces and IoC/Dependancy Injection

Page 30: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Links - MvvmCross Stuart Lodge - MvvmCross Author

•Twitter @slodge

•Blog http://slodge.blogspot.co.uk/

•Videos http://www.youtube.com/user/MrHollywoof?feature=watch

•List of tutorial videos http://mvvmcross.wordpress.com/

•Repository https://github.com/slodge/MvvmCross

Page 31: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Links - Xamarin•Website - http://www.xamarin.com/

•Samples - https://github.com/xamarin

•Mobile library - https://github.com/xamarin/Xamarin.Mobile

Page 32: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Links – Ninja Coder•Adrian Sudbury – Ninja Coder Author

•Twitter @asudbury

•Blog http://adriansudbury.blogspot.co.uk/

•Ninja Coder http://visualstudiogallery.msdn.microsoft.com/618b51f0-6de8-4f85-95ce-a50c658c7767

Page 34: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Credits Mvvm Images from http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/MVVM

Page 35: Hot Tuna CROSS PLATFORM DEVELOPMENT WITH.NET, XAMARIN AND MVVMCROSS

Questions•Answers not guaranteed