В предыдущей версии MvvmCross (5.7) использовалась следующая Навигация:
ShowViewModel<SecondViewModel>(myNavigation);
Был выполнен переход, нарисован View (SecondView), все было нормально.Но после обновления MvvmCross до версии 6 навигация была заменена на:
_navigationService.Navigate< SecondViewModel, options, DestructionResult<settings>>(new params { navigation = myNavigation });
И в обычном случае все работает нормально, но если запустить переход из GooglePayFragment:
SupportFragmentManager.BeginTransaction()
.Add(Resource.Id.dynamic_wallet_fragment, _selectionWalletFragment)
.Commit();
Послеобработка полученного намерения:
private void DoAndroidPay(Intent data)
{
mFullWallet = data.GetParcelableExtra (WalletConstants.ExtraFullWallet).JavaCast<FullWallet>();
var token = mFullWallet.PaymentMethodToken;
ViewModel.DoPayWithAndroidPay (token.Token);
}
public void DoPayWithAndroidPay(string paymentTokenJson)
{
_navigationService.Navigate< SecondViewModel, Params, DestructionResult<Params>>(new Params { token = paymentTokenJson });
}
переход выполнен, логика работает, но представление SecondViewModel не отрисовывается.Если SecondViewModel содержит переход к SomeViewModel, он выполняется нормально (SomeView отображается).
Временно решил проблему, заменив пустую страницу, которая приведет вас к SecondViewModel.
public class TemporaryPayViewModel : LoadingViewModel<Params, DestructionResult<Params>>
{
private readonly IMvxNavigationService _navigationService;
public override void Prepare(Params parameter)
{
Initialize (parameter.token);
}
private async void Initialize(string paymentTokenJson)
{
if (!await GetPaymentFormUrl(paymentTokenJson))
return;
await _navigationService.Navigate< SecondViewModel, Params, DestructionResult<Params>>(new Params { token = paymentTokenJson });
}
}
Howудалить этот обходной путь, и сделать второй экран (SecondViewModel) будет нарисован после нажатия Pay во фрагменте из GooglePay (Android.Gms.Wallet.Fragment)?