MVVMCross支持Xamarin.iOS故事板

时间:2014-03-02 11:25:42

标签: xamarin mvvmcross

由于支持XS集成iOS故事板即将制作Stable流,我希望能够将此功能与MVVMCross结合使用。

从根本上说它似乎有点像它不应该工作,就像故事板指示视图项目中的导航层次结构,而不是像MVVMCross那样的视图模型项目。

但如果有办法让2人一起工作,那将会很棒。

有谁知道如何实现这一目标?

干杯,特里斯坦

4 个答案:

答案 0 :(得分:30)

至少发布了一个展示故事板使用情况的样本 - 名字相当奇怪eh - https://github.com/slodge/eh

此样本的工作原理为:

使用这样的方法,将Mvx数据绑定添加到主要由故事板驱动的应用程序中非常容易。


或者,如果开发人员更愿意让Mvx ShowViewModel导航系统控制屏幕流 - 但也希望在故事板中设计这些屏幕,那么可以通过开发正常的MvvmCross应用程序来实现,但是使用从故事板加载ViewControllers的自定义Presenter

在MvvmCross的v3.1.1中,您可以在ViewsContainer级别执行此操作:

答案 1 :(得分:11)

在一个大型项目中,将所有视图保留在一个故事板中可能会令人生畏。

我更喜欢为每个视图创建一个故事板;我在Stuart的答案中修改了Container,以寻找与视图类匹配的故事板,如果没有找到,则回到主故事板:

public class StoryBoardContainer : MvxTouchViewsContainer
{
    protected override IMvxTouchView CreateViewOfType(Type viewType, MvxViewModelRequest request)
    {
        UIStoryboard storyboard;
        try
        {
            storyboard = UIStoryboard.FromName(viewType.Name, null);
        }
        catch (Exception)
        {
            storyboard = UIStoryboard.FromName("StoryBoard", null);
        }
        return (IMvxTouchView) storyboard.InstantiateViewController(viewType.Name);
    }
}

警告1:要以这种方式实例化viewcontrollers,您必须在编辑器中设置Storyboard ID:

Storyboard ID

警告2:确保继承MvxViewController的视图具有构造函数public MyView(IntPtr handle) : base(handle),因为它用于从故事板中实例化视图控制器。

答案 2 :(得分:8)

故事板支持现在是MvvmCross的一部分。使用一个ViewController / Storyboard方法,如Geir的答案中所述,设置Storyboard ID,并用{{1}}装饰你的MvxViewController部分类。请参阅我的blog上的示例代码。

答案 3 :(得分:3)

我使用mvvmcross和ios故事板制作了一个示例项目(TipCalc):https://github.com/nicruo/TipCalc.Storyboard