My MvvvmCross应用程序使用自定义演示程序,在Ipad上运行时创建SplitView。master和detail都包含一个导航控制器。这很好,只是我不知道如何提示系统我希望下一个视图显示在哪里。我有几个视图,有时应该显示在细节视图中,有时也应该显示在主视图中。如果在iPhone上运行,它们将显示在单个导航控制器中。
因此,在ViewModel中,我想提示下一个视图放在哪里。类似的东西
ShowViewModel(paramObject,ShowInMaster);
如果在iPhone上运行,ShowInMaster将被忽略。
这可能吗?或者我可能做错了?
有一个可选的presentationBundle
参数可以在大多数ShowViewModel
覆盖中使用-请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxNavigatingObject.cs#L39
您可以简单地从Dictionary<string,string>()
创建捆绑包,例如,您可以使用new MvxBundle(new Dictionary<string,string>() { { "ShowSplit":"true" } })
使用时,此演示捆绑包将被放置到MvxViewModelRequest
中-在public IDictionary<string, string> PresentationValues { get; set; }
成员中-请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxViewModelRequest.cs#L33
然后,请求将被传递给您的UI演示者(在其他框架中也称为"导航服务"),然后您在每个平台上的演示者中的自定义代码可以决定如何处理这些"演示"提示-例如,它可以覆盖public override void Show(MvxViewModelRequest request)
来检查演示提示内容,然后进行一些自定义拆分视图显示(请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Touch/Views/Presenters/MvxTouchViewPresenter.cs#L45默认行为)
如果有帮助的话,一个简单的拆分视图显示(使用固定逻辑而不是演示提示)在N=24http://mvvmcross.blogspot.com