Przez ostatnie kilka tygodni pracowałem nad tworzeniem aplikacji wieloplatformowej (IOS/Android/WP7) przy użyciu środowiska MVVMCross. Dziś wpadłem na problem, którego tak naprawdę nie wiem, jak rozwiązać, więc mam nadzieję, że popchniesz mnie we właściwym kierunku.Przekazywanie zmiennych z ViewModel do innego widoku (MVVMCross)
W IOS Mam następującą konstrukcję do nawigowania do innej strony (poniżej kod znajduje się w 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));
}
}
Gdy IMvxCommand jest zwolniony (przycisk wciśnięty) następny View jest załadowany, w tym przypadku BeckhoffActuatorViewModel. W kodzie BeckhoffActuatorView używam KeyValuePair z góry:
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
}
}
Konstrukcja ta działa dobrze w IOS, ale chciałbym używać tej samej konstrukcji w moim Android app.
Kod w ViewModel nie zmienił się, ponieważ to cała idea MVVM. Ale kod BackhoffActuatorView jest różna dla Androida:
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);
}
}
Powyższy kod nie działa, MvxBindingActivityView nie wydaje się, aby zaimplementować coś podobnego do ViewController używam w IOS. Kod znajduje się tylko w standardowym konstruktorze, a gdy zostawiam go całkowicie, nie będzie on kompilowany/uruchamiany.
Czy ktoś wie, że mogę uzyskać dostęp do kluczowej analizy, którą wysyłam za pośrednictwem usługi RequestNavigate? Dziękuję Ci!
Dziękuję Stuart, korzystając z przykładu na Twitterze udało mi się naprawić mój problem! – David
Dobra robota - jeśli potrzebujesz innego przykładu przekazywania parametrów, możesz wypróbować także CustomerManagement i Books :) – Stuart