使用MVVM Light和Tab Bar(iOS)

5
我有一个UITabBarController,其中包含两个UINavigationControllers选项卡。问题在于NavigationService的初始化需要一个UINavigationController作为参数。我希望找到一种方法来让导航控制器成为根视图控制器的选项卡,或者让选项卡控制器成为根视图控制器。
最终我有三个选择:
1. 

                /->  Ctrl 1 -> ctrl 2      
    Nav -> Tab - 
                \->  Ctrl 1 -> ctrl 2

这个选择可以使用,但是在使用 NavigateTo() 推出另一个控制器时,选项卡栏会丢失。这不是一个解决方案,我需要在任何地方都有选项卡。
2.
        /-> Nav -> Ctrl 1 -> ctrl 2      
   Tab - 
        \-> Nav -> Ctrl 1 -> ctrl 2

这种方法行不通,因为SimpleIoc只接受UINavigationController,否则会导致崩溃。显然,这不是一个解决方案。
3.

Navigate using segue or pushing controllers manually, the 'classic' way.

这完全违背了使用MVVM-Light的目的,这也不是一个解决方案。
我看过Stack Overflow上的另一篇文章,他最终选择了第三个选项。我希望在这里能找到其他的东西。
有人对可能的解决方案有任何想法吗?还是我只能自认倒霉?
1个回答

0

我不会完全说选项3违背了MVVM-Light的目的,虽然不是很好,但这是一个选项 - 可能最好将View注入到ViewModel中,并在接口后使用它进行导航。这样,您仍然可以从viewModel控制导航,它还允许您仍然测试viewModel的导航部分,因为“View”在接口后面(可以在此处使用简单的模拟对象)。

我看到的另一个选项是只使用完全自定义的INavigationService,它几乎与您的项目绑定在一起。您可以在以下两个链接中看到执行此操作的项目:

https://github.com/losi999/XamarinSample/blob/f46e9cb1b1c152ff4510123f53b9d8bd9ddacdcf/XamarinSample.Core/Services/INavigationService.cs

https://github.com/mstein11/Happimeter/blob/691501f397a9c86d400a1fe4fe94bb866588a98e/iOS/Services/NativeNavigationService.cs

我猜如果你创建一个自定义NavigationService,它会给你最终的控制权,你也将能够访问历史记录,因此你可以选择以模态方式显示viewControllers,推送它们或者根据当前视图层次结构使用不同的动画。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接