Ho avuto lo stesso identico pensiero un paio di mesi fa, come mi è piaciuto molto il concetto MvvmCross e, naturalmente, il vantaggio di utilizzare XForms per l'interfaccia utente unificata.
MvvmCross è ideale per creare app con logica comune (il progetto condiviso) e avere l'interfaccia utente in diversi progetti (iOS & Android).
Tuttavia, questo non è necessario, poiché tutta l'interfaccia utente è memorizzata in un singolo progetto condiviso e la navigazione e tutti gli altri modelli Mvvm possono essere facilmente raggiunti con MvvmLight (vedere this post).
Nei casi in cui si desidera avere un'interfaccia utente diversa in una piattaforma specifica, i moduli Xamarin hanno introdotto un nuovo concetto chiamato Renderers - in cui è possibile richiamare le funzionalità dell'interfaccia utente nativa, come avresti fatto in due diversi componenti dell'interfaccia utente prima di XForms.
Un esempio di utilizzo in Renderer (tratto dal campione Xamarin):
Nel progetto condiviso, si desidera avere una voce personalizzata con aspetto diverso in iOS, allora si creerà questa classe:
public class MyEntry : Entry {}
E nel codice di iOS, vuoi fare qualcosa di simile:
[assembly: ExportRenderer (typeof (MyEntry), typeof (MyEntryRenderer))]
public class MyEntryRenderer : EntryRenderer
{
// Override the OnElementChanged method so we can tweak this renderer post-initial setup
protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged (e);
if (Control != null) { // perform initial setup
// do whatever you want to the UITextField here!
Control.BackgroundColor = UIColor.LightGray;
Control.BorderStyle = UITextBorderStyle.Line;
}
}
}
Dopo si otterrà familiarità con MVVM luce, vedrai che la navigazione tra viewMo dels è fatto da un componente chiamato INavigationService
Ecco un frammento di codice dalla mia app:
_navigationService.NavigateTo("UserDetailsPage", user);
Sono in un contesto di un modello di vista, che rappresenta una pagina che contiene un elenco di utenti, e quando viene selezionato un utente specifico, sto chiamando a NavigationService, con il tasto "UserDetailsPage", che viene registrato nella configurazione per una pagina, che riceve anche un parametro "utente".
Vorrei anche raccomandare this video per catturare il meglio di MvvmLight ha da offrire.
Non è consigliabile utilizzare MVVMCross per le app Xamarin.Forms, poiché il framework Xamarin.Forms include strumenti MVVM integrati. https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/ –