从多个视图模型创建视图

时间:2013-06-11 13:35:39

标签: ios xamarin mvvmcross

我正在努力找出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中处理此类事情的最佳做法是什么?

我看过使用拆分视图的视频,但我不确定这是否是最佳方法。我需要一个垂直拆分,我只需要一些视图,而不是每个视图。

1 个答案:

答案 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 /设计团队做任何事情。

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

除了标准方法之外,还有很多人选择的其他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

获取