SlideShare a Scribd company logo
Corrado Cavalli
SSDE @ ibvsolutions.com
@corcav
blog.corradocavalli.com
corrado@outlook.com
• Xamarin
• MVVM
• MvvmCross
Di cosa parleremo
• Ci permette di usare C# e i tools che usiamo da sempre
• E’ di Microsoft
• E’ gratis
• Ci permette di condividere codice tra i vari sistemi operativi
• Xamarin Forms vs Xamarin Classic
• Per condividere bisogna usa ModelViewViewmodel
Perché Xamarin?
• Metodologia basata sulla separazione dei ruoli
• 3 ruoli: Model, View e un ‘mediator’ a.k.a ViewModel
MVVM in a slide
View
Model
ViewModel
Property changed events
Invoke
Data
Interaction
Model events
Databinding!
• MVVM richiede Databinding
• Nessun problema se usate Xamarin Forms
• Concetto inesistente in Android e iOS
• Voglio condividere più codice possibile con la massima flessibilità
• Xamarin Forms = Prism
• Xamarin Classic…
• MvvmLight
• MvvmCross
• Monocross (MVC)
MVVM vs Xamarin
• Nato a novembre 2012 come fork di Monocross
• Stuart Slodge @slodge
• Dal 2013
• Tomasz Cielecki @cheesebaron
• Martijn van Dijk @Martijn00
• www.mvvmcross.com
• https://github.com/MvvmCross/MvvmCross/issues/1415
• Supporta Android, iOS, Windows (UWP/WPF/WP), Xamarin Forms
e Mac
MvvmCross
• Flexible architecture
• PCL based
• Inversion of Control
• Dependency injection
• Value Converters
• Bindings
• Testable
• Plugins
• Pro:
• Completo, altamente configurabile, supporto community
• Contro:
• Curva di apprendimento elevata, poca documentazione
MvvmCross
DEMO
TicketNow
• PCL (.NET Standard in v 6.0)
• Models/Interfacce
• ViewModels
• Converters
• …
• App
• Inizializza il motore di IOC e registrazione tipi (via Mvx)
• Inizializzazione del ViewModelLocator
• RegistrerAppStart
• AppStart
• Implementa IMvxAppStart
• Determina il viewmodel di avvio (anche dinamicamente)
Architettura - Core
Architettura - Startup
public class CustomAppStart : MvxNavigatingObject, IMvxAppStart
{
private readonly ILoginService _service;
public CustomAppStart(ILoginService service)
{
_service = service;
}
public void Start(object hint = null)
{
if (!_service.IsLoggedIn)
{
ShowViewModel<LoginViewModel>();
}
else
{
ShowViewModel<MainViewModel>();
}
}
}
• Setup class nei progetti nativi
• Bootstrapper dell’intera app e MvvmCross engine
• Offre una serie di metodi virtual CreateXXX e InitializeXXX
• CreateApp e InitializeIoc
• Da usare per inizializzare implementazioni platform specific
• Android
• Eredita da MvxAndroidSetup
• Si crea una SplashScreenActivity
• RegistraAppStart
• iOS
• AppDelegate eredita da MvxApplicationDelegate
• Inizializzazione in FinishedLaunching
Architettura – Startup (platform)
• I viewmodels ereditano da MvxViewModel
• RaisePropertyChanged
• ShowViewModel<SecondViewModel>
• Individua la View (Views)
• Istanzia, crea ViewModel e associa a DataContext
• La visualizza secondo l’eventuale presenter
• Close(this)
Architettura - Core
• ShowViewModel<SecondViewModel>(selectedItem)
Architettura - Navigazione
public class SecondViewModel : MvxViewModel
{
public void Init(MyType selectedItem)
{
}
}
• Il tipo passato deve essere serializzabile
• Le view sono sempre più complesse, no 1 VM vs 1 View
• I presenters indicano come i ViewModel mappano sulle Views
• Setup.CreateViewPresenter / CreateIosViewContainer
• Permette di specificare come rappresentare i ViewModels
dentro le rispettive Views
• Ogni piattaforma può personalizzare il modo in cui i Viewmodels
vengono visualizzati.
Architettura - Presenters
• Simile al Databinding di Windows
• INPC, ICommand, Converters…
• Android
• Permette di definire il binding nel .axml
• Converters
• Collections
DataBinding
xmlns:local="http://schemas.android.com/apk/res-auto"
local:MvxBind="Text ArtistName, Mode=TwoWay"
local:MvxBind="Text Date, Converter=DateTimeToString"
<Mvx.MvxListView
local:MvxItemTemplate="@layout/item_search_result"
local:MvxBind="ItemsSource Events; ItemClick ShowEventCommand" />
• iOS
• I controller ereditano da MvxController
• Va descritto nel controller via codice usando fluent syntax
• Invocare set.Appy()!
DataBinding
var set = this.CreateBindingSet<SearchByNameView, SearchByNameViewModel>();
set.Bind(ArtistNameTextField)
.For(source => source.Text)
.To(vm => vm.ArtistName)
.Mode(MvxBindingMode.TwoWay);
set.Bind(BuyMessageLabel).To(vm => vm.BuyMessage);
set.Bind(DateLabel).To(vm => vm.Event.Date)
.WithConversion(new DateTimeToStringConverter());
• Helpers di supporto a MVVM
• MvxTableSource, MvxObservableCollection, MvxPickerModel
• Serie di plugin NuGet che estendono MvvmCross
Architettura - PlugIns
bit.ly/mvvmcrossplugins
• MvvmCross è la migliore soluzione MVVM su Xamarin Classic
• Maturo, supportato da community / Stack Overflow
• Copre scenari di utilizzo ‘reali’
• Estensibile
• Non immediato
• Documentazione non chiara e lacunosa
• https://mvvmcross.com
• https://github.com/MvvmCross/MvvmCross/wiki
Recap
THANK YOU! 

More Related Content

PPTX
Slide typescript - xe dotnet - Codemotion Rome 2015
PPTX
Cosa c'è di nuovo in asp.net core 2 0
PPT
Generazione Dinamica di Codice in .NET
PPT
Sviluppo Web Agile con Castle Monorail
PPS
Sviluppo Web Agile Con MonoRail
PPTX
ASP.NET MVC 3: se non ora, quando?
PPTX
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
PPTX
Asp.NET MVC Framework
Slide typescript - xe dotnet - Codemotion Rome 2015
Cosa c'è di nuovo in asp.net core 2 0
Generazione Dinamica di Codice in .NET
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile Con MonoRail
ASP.NET MVC 3: se non ora, quando?
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Asp.NET MVC Framework

Viewers also liked (19)

PPTX
Sviluppo x platform con xamarin
PPTX
introducción a xamarin
PPTX
Dev days 1 Introducción a Xamarin
PPTX
Introduccion a xamarin resumen
PPTX
Introducción al desarrollo en HoloLens
PPTX
Introduccion a Xamarin
PDF
Xamarin y MS Azure | Cognitive Services
PDF
Developing and Designing Native Mobile Apps in Xamarin Studio
PPTX
Xamarin Dev Days Madrid - Xamarin.Forms
PPTX
re-Connect Madrid: Novedades Xamarin
PPTX
Xamarin Dev Days Madrid - Taller Xamarin
PPTX
Interfaces nativas Cross-Platform con Xamarin.Forms
PPTX
Introducción al desarrollo de aplicaciones Xamarin
PPTX
dotNetMálaga - Taller Xamarin
PPTX
Testing de Apps Xamarin
PPTX
SVQDC - Desarrollo de Apps apra Hololens
PDF
Introduction to Xamarin.Forms
PDF
Introduction to Xamarin for Visual Studio 2017
PPTX
Xamarin - First Application
Sviluppo x platform con xamarin
introducción a xamarin
Dev days 1 Introducción a Xamarin
Introduccion a xamarin resumen
Introducción al desarrollo en HoloLens
Introduccion a Xamarin
Xamarin y MS Azure | Cognitive Services
Developing and Designing Native Mobile Apps in Xamarin Studio
Xamarin Dev Days Madrid - Xamarin.Forms
re-Connect Madrid: Novedades Xamarin
Xamarin Dev Days Madrid - Taller Xamarin
Interfaces nativas Cross-Platform con Xamarin.Forms
Introducción al desarrollo de aplicaciones Xamarin
dotNetMálaga - Taller Xamarin
Testing de Apps Xamarin
SVQDC - Desarrollo de Apps apra Hololens
Introduction to Xamarin.Forms
Introduction to Xamarin for Visual Studio 2017
Xamarin - First Application
Ad

Similar to MVVM Cross &lt;3 Xamarin (20)

PPTX
MVVMCross da Windows Phone a Windows 8 passando per Android e iOS
PPTX
Model-View-ViewModel con Windows Store Apps
PPTX
Unofficial Xamarin Day DomusDotNet
PPTX
PPTX
Cert04 70-484 - essentials of developing windows store apps
PPTX
Migliora il tuo codice con knockout.js
PPTX
Da Windows Phone a Windows 8: andata e ritorno
PPTX
PPTX
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
PPTX
Modi innovativi per costruire App
PPTX
Azure dayroma java, il lato oscuro del cloud
PPTX
Le novita di visual studio 2012
PPTX
Brokering over WCF @ dotNetMarche
PPTX
MVVM senza fronzoli con Caliburn.Micro
PPTX
XeDotNet - .Net MAUI
PDF
PDF
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
PPTX
Alessandro Forte - MVP vs MVC
PPTX
Dal requisito all'implementazione @ CD2010
PDF
Blazor: are we ready for the launch?
MVVMCross da Windows Phone a Windows 8 passando per Android e iOS
Model-View-ViewModel con Windows Store Apps
Unofficial Xamarin Day DomusDotNet
Cert04 70-484 - essentials of developing windows store apps
Migliora il tuo codice con knockout.js
Da Windows Phone a Windows 8: andata e ritorno
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Modi innovativi per costruire App
Azure dayroma java, il lato oscuro del cloud
Le novita di visual studio 2012
Brokering over WCF @ dotNetMarche
MVVM senza fronzoli con Caliburn.Micro
XeDotNet - .Net MAUI
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Alessandro Forte - MVP vs MVC
Dal requisito all'implementazione @ CD2010
Blazor: are we ready for the launch?
Ad

MVVM Cross &lt;3 Xamarin

  • 1. Corrado Cavalli SSDE @ ibvsolutions.com @corcav blog.corradocavalli.com corrado@outlook.com
  • 2. • Xamarin • MVVM • MvvmCross Di cosa parleremo
  • 3. • Ci permette di usare C# e i tools che usiamo da sempre • E’ di Microsoft • E’ gratis • Ci permette di condividere codice tra i vari sistemi operativi • Xamarin Forms vs Xamarin Classic • Per condividere bisogna usa ModelViewViewmodel Perché Xamarin?
  • 4. • Metodologia basata sulla separazione dei ruoli • 3 ruoli: Model, View e un ‘mediator’ a.k.a ViewModel MVVM in a slide View Model ViewModel Property changed events Invoke Data Interaction Model events Databinding!
  • 5. • MVVM richiede Databinding • Nessun problema se usate Xamarin Forms • Concetto inesistente in Android e iOS • Voglio condividere più codice possibile con la massima flessibilità • Xamarin Forms = Prism • Xamarin Classic… • MvvmLight • MvvmCross • Monocross (MVC) MVVM vs Xamarin
  • 6. • Nato a novembre 2012 come fork di Monocross • Stuart Slodge @slodge • Dal 2013 • Tomasz Cielecki @cheesebaron • Martijn van Dijk @Martijn00 • www.mvvmcross.com • https://github.com/MvvmCross/MvvmCross/issues/1415 • Supporta Android, iOS, Windows (UWP/WPF/WP), Xamarin Forms e Mac MvvmCross
  • 7. • Flexible architecture • PCL based • Inversion of Control • Dependency injection • Value Converters • Bindings • Testable • Plugins • Pro: • Completo, altamente configurabile, supporto community • Contro: • Curva di apprendimento elevata, poca documentazione MvvmCross
  • 9. • PCL (.NET Standard in v 6.0) • Models/Interfacce • ViewModels • Converters • … • App • Inizializza il motore di IOC e registrazione tipi (via Mvx) • Inizializzazione del ViewModelLocator • RegistrerAppStart • AppStart • Implementa IMvxAppStart • Determina il viewmodel di avvio (anche dinamicamente) Architettura - Core
  • 10. Architettura - Startup public class CustomAppStart : MvxNavigatingObject, IMvxAppStart { private readonly ILoginService _service; public CustomAppStart(ILoginService service) { _service = service; } public void Start(object hint = null) { if (!_service.IsLoggedIn) { ShowViewModel<LoginViewModel>(); } else { ShowViewModel<MainViewModel>(); } } }
  • 11. • Setup class nei progetti nativi • Bootstrapper dell’intera app e MvvmCross engine • Offre una serie di metodi virtual CreateXXX e InitializeXXX • CreateApp e InitializeIoc • Da usare per inizializzare implementazioni platform specific • Android • Eredita da MvxAndroidSetup • Si crea una SplashScreenActivity • RegistraAppStart • iOS • AppDelegate eredita da MvxApplicationDelegate • Inizializzazione in FinishedLaunching Architettura – Startup (platform)
  • 12. • I viewmodels ereditano da MvxViewModel • RaisePropertyChanged • ShowViewModel<SecondViewModel> • Individua la View (Views) • Istanzia, crea ViewModel e associa a DataContext • La visualizza secondo l’eventuale presenter • Close(this) Architettura - Core
  • 13. • ShowViewModel<SecondViewModel>(selectedItem) Architettura - Navigazione public class SecondViewModel : MvxViewModel { public void Init(MyType selectedItem) { } } • Il tipo passato deve essere serializzabile
  • 14. • Le view sono sempre più complesse, no 1 VM vs 1 View • I presenters indicano come i ViewModel mappano sulle Views • Setup.CreateViewPresenter / CreateIosViewContainer • Permette di specificare come rappresentare i ViewModels dentro le rispettive Views • Ogni piattaforma può personalizzare il modo in cui i Viewmodels vengono visualizzati. Architettura - Presenters
  • 15. • Simile al Databinding di Windows • INPC, ICommand, Converters… • Android • Permette di definire il binding nel .axml • Converters • Collections DataBinding xmlns:local="http://schemas.android.com/apk/res-auto" local:MvxBind="Text ArtistName, Mode=TwoWay" local:MvxBind="Text Date, Converter=DateTimeToString" <Mvx.MvxListView local:MvxItemTemplate="@layout/item_search_result" local:MvxBind="ItemsSource Events; ItemClick ShowEventCommand" />
  • 16. • iOS • I controller ereditano da MvxController • Va descritto nel controller via codice usando fluent syntax • Invocare set.Appy()! DataBinding var set = this.CreateBindingSet<SearchByNameView, SearchByNameViewModel>(); set.Bind(ArtistNameTextField) .For(source => source.Text) .To(vm => vm.ArtistName) .Mode(MvxBindingMode.TwoWay); set.Bind(BuyMessageLabel).To(vm => vm.BuyMessage); set.Bind(DateLabel).To(vm => vm.Event.Date) .WithConversion(new DateTimeToStringConverter());
  • 17. • Helpers di supporto a MVVM • MvxTableSource, MvxObservableCollection, MvxPickerModel • Serie di plugin NuGet che estendono MvvmCross Architettura - PlugIns bit.ly/mvvmcrossplugins
  • 18. • MvvmCross è la migliore soluzione MVVM su Xamarin Classic • Maturo, supportato da community / Stack Overflow • Copre scenari di utilizzo ‘reali’ • Estensibile • Non immediato • Documentazione non chiara e lacunosa • https://mvvmcross.com • https://github.com/MvvmCross/MvvmCross/wiki Recap