我的应用程序(使用MvvmCross编写并考虑到MVVM模式)需要显示弹出窗口,用户可以选择或确认某些选项。所以基本上它是一个经典的模态对话框,但由于应用程序的视图模型是在一个可移植的类库中实现的,它需要在广义上解决模态问题——一些平台根本没有精确匹配的模态对话框。
有几个线程讨论MVVM中的对话框(在WPF MVVM中打开对话框,WPF MVVM对话框示例)。根据他们的建议,我可以通过引入DialogService并在每个平台上实现它来解决这个问题。不过,我将像对待其他服务一样对待这些对话框——存储服务、地图服务等。但是对话框是表示概念的一部分,所以我想知道它是否可以被视为更像一个视图,所以,而不是调用一个模糊的IDialogService的实例,我可以使用我选择的MVVM框架(MvvmCross在我的情况下)导航到它。我检查了MvvmCross的实现和示例,但发现几乎没有与对话框相关的东西。
在MvvmCross中,presenter
负责使用ShowViewModel
时如何显示视图/ViewModels。
这个演示器是一个视图/UI级对象——最终是UI的工作来决定一个视图是否应该显示为页面、控件、选项卡、分屏视图、对话框等等。
v3确实引入了一个显示提示,即ViewModel可以帮助建议如何显示视图——但是如何(如果)使用这个提示取决于每个平台上的演示者。
或者,对话框/flyouts/等可以很容易地显示使用MvxMessenger消息从ViewModel到View与后面的一点代码。
关于"情态",也可以参考Greg关于"返回结果"的帖子-参见http://www.gregshackles.com/2012/11/returning-results-from-view-models-in-mvvmcross/