从非视图中打开 mvvmcross 中的视图的正确方法是什么?在视图模型中,我们将使用 ShowViewModel<>(..)。
具体来说,我们正在响应打开应用程序(带有自定义有效负载)的推送通知,该通知指示应加载的视图。
我们有一个简单的解决方法只是为了证明概念,只是想了解正确的 MVX 方法
从非视图中打开 mvvmcross 中的视图的正确方法是什么?在视图模型中,我们将使用 ShowViewModel<>(..)。
具体来说,我们正在响应打开应用程序(带有自定义有效负载)的推送通知,该通知指示应加载的视图。
我们有一个简单的解决方法只是为了证明概念,只是想了解正确的 MVX 方法
我认为没有“正确的方法”——我认为这取决于您的应用程序以及您需要它做什么。
对于某些特定情况 - 例如 ViewModel->ViewModel 和 AppStart - MvvmCross 提供了一些方便的方法:
ShowViewModel
打电话MvxViewModel
但总的来说,任何类都可以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 (Core) 控制到 MyCustomAppStart 类。
参考上面的链接