MVVMCross
da Windows Phone a Windows 8
  passando per Android e iOS




Dan ARDELEAN
Twitter: @danardelean
Email:
dan.ardelean@neologics.eu
Smartphones
  Operating   1Q12      1Q12 Market     1Q11      1Q11 Market
   System     Units      Share (%)      Units      Share (%)
Android        81,067.4          56.1    36,350.1          36.4

iOS            33,120.5          22.9    16,883.2          16.9

Symbian        12,466.9           8.6    27,598.5                27.7
Research In                       6.9                            13.0
Motion          9,939.3                  13,004.0
Bada            3,842.2           2.7      1,862.2                1.9

Microsoft       2,712.5           1.9      2,582.1                2.6
Altri           1,242.9           0.9      1,495.0                1.5
                                          Source: Gartner (April 2012)
Totale        144,391.7         100.0    99,775.0              100.0
                                         Source: Gartner (Maggio 2012)
Tablet

        OS    2011        2012       2013              2016
iOS           39.998      72.988     99.553           169.652
Android       17.292      37.878     61.684           137.657
Microsoft         0        4.863     14.547             43.648
QNX             807        2.643       6.036            17.836
Altri          1,919        510          637               464
Totale       60.017     118.883    182.457         369.258
                                   Source: Gartner (Aprile 2012)
Agenda

• C# per sviluppo mobile cross-platform

• Introduzione a MVVM e MVVMCross

• TwitterSearch

• Sqlite cross-platform

• Domande
C# per sviluppo mobile cross-platform

• Usando C# si può sviluppare per: Windows Phone, Windows 8,
  Android e iOS


• Possibilità di sfruttare features come: generics, linq, anonymous
  methods, async


• Possibilità di riutilizzare il codice


• Costi per lo sviluppo e la manutenzione del codice sorgenti più
  contenuti
Cosa serve – Windows Phone
• Windows 7

• Visual Studio 2010
  Express or Ultimate

• Account AppHub 99$

• Telefono
Cosa serve – Windows 8

• PC con Windows 8 RP

• Visual Studio 2012 RC

• Fare i lab di Win8
Cosa serve – Android
• Windows o Mac

• MonoDevelop o Visual
  Studio

• Mono for Android 399$

• Play account 25$
Cosa serve – iOS
• Mac

• MonoDevelop e XCode

• Mono for iOS 399$

• iOS account 99$

• MacIncloud
  http://www.macincloud.com
MVVM

           get/set
           proprietà




                        ViewModel
           commandi




                         ViewModel
                           ViewModel




                                                          Model
View




                                       Qualsiasi codice




                                                           Model
 View




                                       C#!




                                                            Model
   View




          notifiche
          messaggi
Implementare MVVM
•   Properties
•   INotifyPropertyChanged
•   INotifyCollectionChanged
•   Data Binding
•   IValueConverter
•   ICommand
•   UI Thread
Vantaggi MVVM
• Separazione tra BL e UI

• Più facile da testare

• MVVMCross riutilizzo codice cross-
  platform
MVVMCross
MVVMCross
Stuart Lodge (https://github.com/slodge/MvvmCross)


              get/set
              proprietà




                          ViewModel
              commandi




                           ViewModel
                             ViewModel




                                                               Model
  View




                                            Qualsiasi codice




                                                                Model
   View




                                            C#!




                                                                 Model
     View




             notifiche
             messaggi




  Codice
                                         Codice condiviso
 Specifico
TwitterSearch
Model & Service
HomeViewModel
TwitterViewModel
Windows Phone 7




• Niente C#, solo XAML con {Binding}
• Binding syntax includes:
•   {Binding Path, Converter=Converter,
    ConverterParameter=Parameter, Mode=Mode,
    FallbackValue=Fallback}
Android
• Niente C#, solo
  xml con attributi
  MvxBind


• La sintassi
  MvxBind è
  JSON con
  struttura XAML.
Xaml vs MvxBind
WP7:
 Text=‚{Binding SearchText,Mode=TwoWay}‛


Android:
         local:MvxBind=‚{‘Text’:
 {‘Path’:’SearchText’,’Mode’:’TwoWay’}}‛
Xaml vs MvxBind
WP7:
                Text=‚{Binding
Timestamp,Converter={StaticResource TimeAgo}}‛


Android:
            local:MvxBind=‚{‘Text’:
  {‘Path’:’Timestamp’,Converter’:’TimeAgo’}}‛
iPhone App
• UI in XML usando Xcode
• XIB collegato alle classe C# usando
  MonoTouch
• Binding nel codice C# usando JSON
iPad
• L’applicazione iPad è la stessa
  applicazione usando iPhone App –
  “Universal”
• La UI sfrutta lo schermo più grande.
• Impostazioni usando:
 IMvxTouchViewPresenter
Windows 8
Windows 8 Binding
Simile a Windows Phone 7….
• Niente C#, solo XAML con {Binding}


• Usa ValueConverters per i Bindings
• Per le leste binding su ItemsSource

• Però: La navigazione si fa tramite codice e
  non tramite Uri Xaml
Sqlite cross-platform
                     Business logic


                       Data layer


                        sqlite-net

 csharp-sqlite   Sqlite x WinRT             Dentro l’OS


Windows Phone       WinRT             iOS            Android
Sqlite cross-platform
• Sqlite per WinRT x86 e x64
• http://www.sqlite.org/download.html

• sqlite-net         https://github.com/praeclarum/sqlite-
  net

• csharp-sqlite          http://code.google.com/p/csharp-
  sqlite/
XAMARIN COUPON

             -15%
https://store.xamarin.com/?discount=wprefresh



     -fino a fine Luglio-
Domande?

MVVMCross da Windows Phone a Windows 8 passando per Android e iOS

  • 1.
    MVVMCross da Windows Phonea Windows 8 passando per Android e iOS Dan ARDELEAN Twitter: @danardelean Email: dan.ardelean@neologics.eu
  • 2.
    Smartphones Operating 1Q12 1Q12 Market 1Q11 1Q11 Market System Units Share (%) Units Share (%) Android 81,067.4 56.1 36,350.1 36.4 iOS 33,120.5 22.9 16,883.2 16.9 Symbian 12,466.9 8.6 27,598.5 27.7 Research In 6.9 13.0 Motion 9,939.3 13,004.0 Bada 3,842.2 2.7 1,862.2 1.9 Microsoft 2,712.5 1.9 2,582.1 2.6 Altri 1,242.9 0.9 1,495.0 1.5 Source: Gartner (April 2012) Totale 144,391.7 100.0 99,775.0 100.0 Source: Gartner (Maggio 2012)
  • 3.
    Tablet OS 2011 2012 2013 2016 iOS 39.998 72.988 99.553 169.652 Android 17.292 37.878 61.684 137.657 Microsoft 0 4.863 14.547 43.648 QNX 807 2.643 6.036 17.836 Altri 1,919 510 637 464 Totale 60.017 118.883 182.457 369.258 Source: Gartner (Aprile 2012)
  • 4.
    Agenda • C# persviluppo mobile cross-platform • Introduzione a MVVM e MVVMCross • TwitterSearch • Sqlite cross-platform • Domande
  • 5.
    C# per sviluppomobile cross-platform • Usando C# si può sviluppare per: Windows Phone, Windows 8, Android e iOS • Possibilità di sfruttare features come: generics, linq, anonymous methods, async • Possibilità di riutilizzare il codice • Costi per lo sviluppo e la manutenzione del codice sorgenti più contenuti
  • 6.
    Cosa serve –Windows Phone • Windows 7 • Visual Studio 2010 Express or Ultimate • Account AppHub 99$ • Telefono
  • 7.
    Cosa serve –Windows 8 • PC con Windows 8 RP • Visual Studio 2012 RC • Fare i lab di Win8
  • 8.
    Cosa serve –Android • Windows o Mac • MonoDevelop o Visual Studio • Mono for Android 399$ • Play account 25$
  • 9.
    Cosa serve –iOS • Mac • MonoDevelop e XCode • Mono for iOS 399$ • iOS account 99$ • MacIncloud http://www.macincloud.com
  • 10.
    MVVM get/set proprietà ViewModel commandi ViewModel ViewModel Model View Qualsiasi codice Model View C#! Model View notifiche messaggi
  • 11.
    Implementare MVVM • Properties • INotifyPropertyChanged • INotifyCollectionChanged • Data Binding • IValueConverter • ICommand • UI Thread
  • 12.
    Vantaggi MVVM • Separazionetra BL e UI • Più facile da testare • MVVMCross riutilizzo codice cross- platform
  • 13.
  • 14.
    MVVMCross Stuart Lodge (https://github.com/slodge/MvvmCross) get/set proprietà ViewModel commandi ViewModel ViewModel Model View Qualsiasi codice Model View C#! Model View notifiche messaggi Codice Codice condiviso Specifico
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    Windows Phone 7 •Niente C#, solo XAML con {Binding} • Binding syntax includes: • {Binding Path, Converter=Converter, ConverterParameter=Parameter, Mode=Mode, FallbackValue=Fallback}
  • 20.
    Android • Niente C#,solo xml con attributi MvxBind • La sintassi MvxBind è JSON con struttura XAML.
  • 21.
    Xaml vs MvxBind WP7: Text=‚{Binding SearchText,Mode=TwoWay}‛ Android: local:MvxBind=‚{‘Text’: {‘Path’:’SearchText’,’Mode’:’TwoWay’}}‛
  • 22.
    Xaml vs MvxBind WP7: Text=‚{Binding Timestamp,Converter={StaticResource TimeAgo}}‛ Android: local:MvxBind=‚{‘Text’: {‘Path’:’Timestamp’,Converter’:’TimeAgo’}}‛
  • 23.
    iPhone App • UIin XML usando Xcode • XIB collegato alle classe C# usando MonoTouch • Binding nel codice C# usando JSON
  • 24.
    iPad • L’applicazione iPadè la stessa applicazione usando iPhone App – “Universal” • La UI sfrutta lo schermo più grande. • Impostazioni usando: IMvxTouchViewPresenter
  • 25.
  • 26.
    Windows 8 Binding Similea Windows Phone 7…. • Niente C#, solo XAML con {Binding} • Usa ValueConverters per i Bindings • Per le leste binding su ItemsSource • Però: La navigazione si fa tramite codice e non tramite Uri Xaml
  • 27.
    Sqlite cross-platform Business logic Data layer sqlite-net csharp-sqlite Sqlite x WinRT Dentro l’OS Windows Phone WinRT iOS Android
  • 28.
    Sqlite cross-platform • Sqliteper WinRT x86 e x64 • http://www.sqlite.org/download.html • sqlite-net https://github.com/praeclarum/sqlite- net • csharp-sqlite http://code.google.com/p/csharp- sqlite/
  • 29.
    XAMARIN COUPON -15% https://store.xamarin.com/?discount=wprefresh -fino a fine Luglio-
  • 30.