MVVMCross支持Xamarin.iOS故事板

Jed*_*per 26 mvvmcross xamarin

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

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

但是,如果有办法使两者协同工作,那将是非常棒的.

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

干杯,特里斯坦

Stu*_*art 30

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

该样本的工作原理是:

使用这样的方法,将Mvx Data-Binding添加到主要由Storyboard驱动的应用程序中非常容易.


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

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

  • 只要我们开发真正的跨平台应用程序,第二种方法绝对是正确的方法.最好使用ShowViewModel进行导航,并在平台之间共享此逻辑. (4认同)

Gei*_*erg 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

故事板ID

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


kwl*_*kwl 8

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