Nelle ultime due settimane ho lavorato allo sviluppo di un'app cross platform (IOS/Android/WP7) utilizzando il framework MVVMCross. Oggi mi sono imbattuto in un problema che non so davvero come risolvere, quindi spero che tu possa spingermi nella giusta direzione.Passaggio di variabili da ViewModel a un'altra vista (MVVMCross)
Nel IOS ho la costruzione segue per la navigazione verso un'altra pagina (il codice qui sotto si trova in una ViewModel):
KeyValuePair<string,string> kvpAct1 = new KeyValuePair<string, string>("short", ".countertest5");
public IMvxCommand BeckhoffActuator1
{
get
{
return new MvxRelayCommand<Type>((type) => this.RequestNavigate<Beckhoff.BeckhoffActuatorViewModel>(kvpAct1));
}
}
Quando questo IMvxCommand viene licenziato (pulsante premuto) il prossimo View viene caricata, in questo caso il BeckhoffActuatorViewModel. Nel codice del BeckhoffActuatorView uso il KeyValuePair dall'alto:
public class BeckhoffActuatorView : MvxTouchDialogViewController<BeckhoffActuatorViewModel>
{
ICollection<string> icol;
public BeckhoffActuatorView(MvxShowViewModelRequest request) : base(request, UITableViewStyle.Grouped, null, true)
{
icol = request.ParameterValues.Values;
}
public override void ViewDidLoad()
{
//Code
}
}
Questa costruzione sta lavorando bene in IOS, ma vorrei utilizzare la stessa costruzione nel mio app Android.
Il codice nel ViewModel non è cambiato poiché è l'intera idea di MVVM. Ma il codice della BackhoffActuatorView è diversa per Android:
public class BeckhoffActuatorView : MvxBindingActivityView<BeckhoffSensorViewModel>
{
public ICollection<string> icol;
public BeckhoffActuatorView()
{
Debug.WriteLine("Standard");
}
public BeckhoffActuatorView(MvxShowViewModelRequest request)
{
Debug.WriteLine("Custom");
icol = request.ParameterValues.Values;
}
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.BeckhoffActuatorView);
}
}
Il codice di cui sopra non funziona, il MvxBindingActivityView non sembra di implementare qualcosa di simile al ViewController che uso in IOS. Il codice viene solo nel costruttore standard, e quando lo lascio completamente non verrà compilato/eseguito.
Qualcuno sa che posso accedere al keyvaluepair che invio con RequestNavigate? Grazie!
Grazie Stuart, utilizzando l'esempio di Twitter sono riuscito a risolvere il mio problema! – David
Buon lavoro: se hai bisogno di un altro esempio di passaggio dei parametri, puoi provare anche gli esempi CustomerManagement e Books :) – Stuart