我正在努力找出mvvmcross,如果我可以将它用于iPhone(以及最终的iPad和Android)应用程序,我将要开发。 MVVM模式非常强大,对我来说很有用,但我有几个视图,我需要添加一个导航控件,允许用户跳转到几个不同的其他视图,我想知道什么是最好的方法。
现在,我已经创建了一个NavigationControlViewModel
,它公开了一个NavigationLinkViewModel
集合,它有一个链接文本属性和一个显示相应视图的命令。但是要将其添加到视图中,比如说,MyViewModel
有点棘手。现在我所做的就是将NavigationControlViewModel
添加到MyViewModel
,以便我可以在MyView
中绑定它:
private NavigationControlViewModel _nav;
public NavigationControlViewModel Navigation {
get {
_nav = _nav ?? new NavigationControlViewModel (Mvx.Resolve<INavigationService> ());
return _nav;
}
}
这有效,但似乎并不像我想的那样包含得很好。我仍然需要为MyView
添加NavigationControlViewModel
控件,然后将其添加到需要它的每个其他视图(以及将其添加到视图模型中)。
在iOS和MVVM中处理此类事情的最佳做法是什么?
我看过使用拆分视图的视频,但我不确定这是否是最佳方法。我需要一个垂直拆分,我只需要一些视图,而不是每个视图。
答案 0 :(得分:1)
为了在视图模型之间共享导航机制,我猜你可以像使用NavigationControlViewModel
一样使用聚合,也可以使用BaseViewModel
类中的所有导航项继承。
我个人很乐意使用其中任何一个,但会确保将我的所有导航选项公开为ICommand
- 只是因为那样.Net风格的数据绑定通常需要&#39 ;动作钩子&#39;要呈现。请注意,有一种生成ICommand的反射方式 - 请参阅http://slodge.blogspot.co.uk/2013/03/fixing-mvvm-commands-making-hot-tuna.html
通过屏幕上的ViewModel
实际呈现View
...我鼓励您相信您可以为您和您的UX /设计团队做任何事情。
部分标准演示方法可通过以下方式获得:UINavgiationController
,UISplitViewController
,UITabBarViewController
,UIPopupView
和PresentModalViewController
- 您可以自由使用这些方法并将它们组合在一起 - 例如你可以有一个导航控制器,其中两层深层显示一个模态视图,其中包含一个带有两个子视图的拆分视图...
除了标准方法之外,还有很多人选择的其他UI设计范例:
默认情况下,MvvmCross为您提供了一个完整的页面&#39;演示者在View
内以相同的方式呈现每个ViewModel
- UINavigationController
对。正如您在N + 1视频中看到的那样,您可以轻松覆盖该行为,然后您可以选择以您喜欢的任何方式展示View
- ViewModel
对 - 例如你可以选择呈现一些整个页面,一些使用飞出,然后一些使用选项卡。
因为IMvxTouchView
演示者只是C#代码,并且因为我们喜欢编写C#代码,所以我们可以在演示者中实现我们想要的任何奇妙逻辑,包括测试当前显示的内容以确定的代码在哪里显示下一页。
我无法评论最佳做法&#39;是为了让设计看起来不错。
但我相信如果您坚持通过ShowViewModel
展示您的视图模型,那么这将使您在每个平台上使用的演示策略具有最大的灵活性。
有关演示者的更多信息可通过http://slodge.blogspot.co.uk/2013/06/presenter-roundup.html
获取