首页 文章

从多个视图模型创建视图

提问于
浏览
0

我正在努力找出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 回答

  • 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 /设计团队想要做的事情 .

    一些标准的表示方法可以通过以下方式获得: UINavgiationControllerUISplitViewControllerUITabBarViewControllerUIPopupViewPresentModalViewController - 您可以自由地使用它们并将它们组合在一起 - 例如你可以有一个导航控制器,两层深层显示一个模态视图,其中包含一个带有两个子视图的拆分视图...

    除了标准方法之外,人们还选择了许多其他UI设计范例:

    默认情况下,MvvmCross为您提供'whole page'演示者,它在 UINavigationController 内以相同的方式呈现每个 View - ViewModel 对 . 正如您在N 1视频中看到的那样,您可以轻松覆盖该行为,然后您可以选择以您喜欢的任何方式呈现 View - ViewModel 对 - 例如你可以选择呈现一些整个页面,一些使用飞出,然后一些使用选项卡 .

    因为 IMvxTouchView 演示者只是C#代码,并且因为我们喜欢编写C#代码,所以我们可以在演示者中实现我们想要的任何精彩逻辑,包括测试当前正在显示的内容的代码,以确定在哪里显示下一页 .

    我不能评论什么是“最佳实践”,使设计看起来不错 .

    但我确实相信,如果您坚持通过 ShowViewModel 显示您的视图模型,那么这将使您在每个平台上使用的演示策略中具有最大的灵活性 .

    有关演示者的更多信息,请访问http://slodge.blogspot.co.uk/2013/06/presenter-roundup.html

相关问题