如何在mvvmcross中从非视图文件中打开视图?在视图模型内部,我们会使用ShowViewModel<>(..)。
具体来说,我们正在响应推送通知来启动应用程序(带有自定义有效载荷),该有效载荷指定了应加载的视图。
我们有一个hackety解决方案,只是为了概念证明,想弄清楚正确的MVX方法。
如何在mvvmcross中从非视图文件中打开视图?在视图模型内部,我们会使用ShowViewModel<>(..)。
具体来说,我们正在响应推送通知来启动应用程序(带有自定义有效载荷),该有效载荷指定了应加载的视图。
我们有一个hackety解决方案,只是为了概念证明,想弄清楚正确的MVX方法。
我认为没有一种“正确的方法”-我认为这取决于您的应用程序以及您需要它执行的任务。
对于某些特定情况-例如ViewModel->ViewModel和AppStart-MvvmCross提供了一些方便的方法:
MvxViewModel
中调用ShowViewModel
但总体而言,任何类都可以通过调用以下方式请求ShowViewModel
:
var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
viewDispatcher.ShowViewModel(new MvxViewModelRequest(
viewModelType,
parameterBundle,
presentationBundle,
requestedBy));
此外,有一个基类 - MvxNavigatingObject.cs - 可以帮助解决这个问题(它是MvxViewModel和MvxAppStart的基类),所以您可以轻松地提供一个或多个服务,如INavigateMyselfService
,其实现继承自MvxNavigatingObject
。
public interface INavigateMyselfService
{
void GoWild(string side);
}
public class NavigateMyselfService
: MvxNavigatingObject
, INavigateMyselfService
{
public void GoWild(string side)
{
ShowViewModel<WildViewModel>(new { side = side });
}
}
http://forums.xamarin.com/discussion/4694/conditionally-call-registerappstart-with-mvvmcross
请查看上面的链接,你会了解到一些想法。
在我的情况下,我想从辅助磁贴启动应用程序。为此,我必须启动特定的辅助磁贴页面。
我的初始应用程序启动视图模型是LoginViewModel,而我的自定义应用程序启动视图模型是HomeViewModel。
我从App.cs(核心)控制这一点,到MyCustomAppStart类。
请参考上述链接。