hot tuna - from sean cross
TRANSCRIPT
Hot TunaCROSS 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
To cover•What are we trying to achieve
•Example
•Theory (boring!)
•Getting started with MvvmCross
•Plugins
•Platform specific stuff
•Summary
•Links
The holy grail
What is achievable
Example – Lions Official (sorry)
The pieces•.net (duh)•Xamarin (iOS, Android, Mac)•Portable Class Libraries•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
Xamarin Demo
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…)
.net x.x
Portable Class LibraryShared functionality
Silverlight
.net x.x
Windows Store
Portable Class LibraryShared functionality
Silverlight
.net x.x
Windows Store
Portable Class LibraryShared functionality
Silverlight
Xamarin.XXXX
PCL Demo Easy-peasy, lemon squeezy
It’s hard to find a good image of a class library
Mvvm: Model – View Model - Model
Mvvm: Key interfaces•INotifyPropertyChanged• RaisePropertyChanged(() => PropertyName );
•ICommand
•INotifyCollectionChanged (or ObservableCollection)
Mvvm: Binding
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>(); }}
MvvmCross•Cross Platform MVVM Development Framework
•Free, open source
•Supports• WP7,8• WPF• WinRT• Xamarin.Android• Xamarin.iOS• Xamarin.Mac
•AKA Mvx
MvvmCross Architecture
Using MvvmCross•Hard - download from github, compile, include references etc
•Easy - Nuget; look for MvvmCross Hot Tuna Starter Pack, and plugins
•Real Easy - NinjaCoder
Getting started - Nuget
Getting started - NinjaCoder
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
Plugins Demo
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>();
Platform specific example•Here is one that I prepared earlier
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
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
Links - Xamarin•Website - http://www.xamarin.com/
•Samples - https://github.com/xamarin
•Mobile library - https://github.com/xamarin/Xamarin.Mobile
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
Links - Other http://www.hanselman.com/blog/CrossPlatformPortableClassLibrariesWithNETAreHappening.aspx
http://sourceitsoftware.blogspot.co.nz/
Credits Mvvm Images from http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/MVVM
Questions•Answers not guaranteed