-
MVVMCross
-
Windows应用商店
-
Android
我有一个浏览层次结构的VM(BrowseVm)并支持前向导航
ShowViewModel<LeafDetailVM>
到叶子细节ViewModel(LeafDetailVM) .
当用户在LeafDetail View上时,他们应该可以说“我想要这个”并且它们将返回到启动BrowseVm的视图 .
我不能简单地转发导航到启动器,因为这将使我无效的后台堆栈 . 我不能将BrowseVM视图作为NoHistory页面,因为我需要它在后栈中以支持从LeafDetail视图返回 .
我的计划是让启动器使用GUID启动BrowseVm . BrowseVm会将该GUID传递给LeafDetailVM .
在“我想要这个”命令中,我将引发一个包含GUID的消息,即BrowseVM和发起者都订阅了 . 然后我将关闭LeafDetailVM .
当BrowseVM收到消息通知时,它将比较GUID,如果匹配,它将自行关闭 .
当发起者收到通知时,它将处理现在选择的数据 .
这有意义吗?我错过了一个更简单的方法吗?
这与How to pass a parameter from a viewmodel to its parent viewmodel类似,但不处理后栈 .
谢谢
1 回答
我建议你尝试停止将视图在平台上的工作方式与视图模型进行精神耦合 .
使用MvvmCross中的自定义Presenter机制,在应用程序(平台特定代码)中,您可以以不同方式处理导航到某个视图模型,包括关闭视图,修改backstack等 . 您可以将导航解释为视图模型中的任何内容你想要的方式\需要 .
例如,您可以从View-model传递ShowViewModel请求中的一些参数,view-presenter(IMvxViewPresenter)可以在Show()中以不同方式解释这些参数以显示视图模型 .
在您的情况下,您实际上可以导航到启动所选信息的启动器VM . 在视图展示器中,您可以按需要的方式修改Backstack . 在Android上,请确保您已阅读并了解所有LaunchMode标志,例如LaunchMode.SingleTask,它允许您将启动器活动置于前面而不创建新活动 .
我不清楚,BrowseVm是LeafDetailVM的父视图模型吗?需要更多信息才能准确了解您的场景 .