我正在努力找出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
添加控件 MyView
然后将其添加到需要它的每个其他视图(以及将其添加到他们的视图模型) .
在iOS和MVVM中处理此类事情的最佳做法是什么?
我've seen the video on using a split view, but I'我不确定这是不是最好的方法 . 我需要一个垂直分割,我只需要在某些视图上,而不是每个视图 .
1 回答
为了在视图模型之间共享导航机制,我想您可以使用任何聚合,因为您已经完成了
NavigationControlViewModel
,或者您可以将继承与BaseViewModel
类中的所有导航项一起使用 .我个人很乐意使用其中任何一个,但会确保将我的所有导航选项公开为
ICommand
- 只是因为's the way .Net-style data-binding generally expects '动作挂钩' to be presented. Note that there is a reflection way of generating ICommand' s - 请参阅http://slodge.blogspot.co.uk/2013/03/fixing-mvvm-commands-making-hot-tuna.html为了通过屏幕上的
View
实际呈现ViewModel
...我鼓励您相信您可以做任何您和您的UX /设计团队想要做的事情 .一些标准的表示方法可以通过以下方式获得:
UINavgiationController
,UISplitViewController
,UITabBarViewController
,UIPopupView
和PresentModalViewController
- 您可以自由地使用它们并将它们组合在一起 - 例如你可以有一个导航控制器,两层深层显示一个模态视图,其中包含一个带有两个子视图的拆分视图...除了标准方法之外,人们还选择了许多其他UI设计范例:
flyout和flyunder视图 - 就像汉堡包菜单一样
Twitter iPad堆叠视图方法 - 如https://github.com/steipete/PSStackedView
抬头显示视图(对话框)
连续滚动视图
......更多 - 请参阅http://pttrns.com/categories/13-navigations
默认情况下,MvvmCross为您提供'whole page'演示者,它在
UINavigationController
内以相同的方式呈现每个View
-ViewModel
对 . 正如您在N 1视频中看到的那样,您可以轻松覆盖该行为,然后您可以选择以您喜欢的任何方式呈现View
-ViewModel
对 - 例如你可以选择呈现一些整个页面,一些使用飞出,然后一些使用选项卡 .因为
IMvxTouchView
演示者只是C#代码,并且因为我们喜欢编写C#代码,所以我们可以在演示者中实现我们想要的任何精彩逻辑,包括测试当前正在显示的内容的代码,以确定在哪里显示下一页 .我不能评论什么是“最佳实践”,使设计看起来不错 .
但我确实相信,如果您坚持通过
ShowViewModel
显示您的视图模型,那么这将使您在每个平台上使用的演示策略中具有最大的灵活性 .有关演示者的更多信息,请访问http://slodge.blogspot.co.uk/2013/06/presenter-roundup.html