2015-03-01 12 views
5

Qualcuno ha esempi di codice che mostrano un'app nativa IOS e/o Android utilizzando sia i moduli xamarin che le viste mvvmcross nello stesso progetto?moduli xamarin che funzionano con mvvmcross

ho trovato un sacco di applicazioni di esempio con uno o l'altro ma nessuno utilizzando sia

Ad esempio in un ViewModel quando chiamo:

this.ShowViewModel<MyCustomViewModel>(); 

Nel mio progetto iOS voglio essere in grado di avere la possibilità di creare un xamarin forma ContentPage OPPURE un mvvmcross MvxViewController.

vale a dire nel mio progetto comune avrò entrambe le viste XForm e, per le mie opinioni più complesse in cui XForms non è abbastanza ricco, vista mvvmcross

Eventuali esempi di codice o progetti GitHub sarebbe grande. Ho già cercato dappertutto!

+0

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/ –

risposta

1

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.

Problemi correlati