MvvmCross:如何在Android上从常规视图导航到Mvvm viewmodel?

时间:2013-05-23 16:13:53

标签: mvvm xamarin.android mvvmcross

我正在慢慢将我的应用迁移到Android上的MvvmCross。我尚未将所有活动转换为ViewModels。因此,我需要从Mvvm控制的Activity导航到常规Activity。为此,我创建了自己的Presenter并拦截了Show方法并完成了自己的StartActivity。这似乎有效。但是,现在我需要转向另一个方向,让我的常规活动回到最初的Mvvm控制的Activity。我尝试使用CLEAR_TOP标志在ViewModel上执行StartActivity,但是我收到了一个错误:

"Null Extras seen on Intent when creating ViewModel - this should not happen - have you tried to navigate to an MvvmCross View directly?"

如何从常规活动回到原始的Mvvm控制活动?

2 个答案:

答案 0 :(得分:2)

...简单

要从任何标准Android Activity返回,您只需要Activity关闭Finish()

即可

但除此之外......

如果您想转发MvvmCross View,那么您需要了解一些关于MvvmCross内部的内容:特别是关于MvvmCross导航在概念上如何在ViewModels之间而不是{{1}之间发生}},ActivitiesPages

如果您想转发新的UIViewControllers,那么您可以使用ViewModel单身人士执行此操作 - 如何执行此操作显示在Show view from non-view/viewmodel in mvvmcross

如果您以后想要从当前IMvxViewDispatcher返回,那么您可以尝试在ViewModel内调用Close(this) - 默认情况下,在Android上这将映射到{{1触摸到ViewModel,在WpDev上转到Finish()

答案 1 :(得分:0)

这似乎有效,但是因为我使用特殊的字符串“MvxLaunchData”,所以它是一个黑客。

Intent i = new Intent(this,typeof(LoginView));
i.AddFlags(ActivityFlags.ClearTop);
var converter = Mvx.Resolve<IMvxNavigationSerializer> ();
MvxViewModelRequest request = MvxViewModelRequest.GetDefaultRequest (typeof(LoginViewModel));
i.PutExtra ("MvxLaunchData", converter.Serializer.SerializeObject(request));
StartActivity(i);

我将尝试您引用的其他问题中显示的方法。