在Prism.DryIoc中使用viewmodels注册视图的正确方法是什么

时间:2017-12-17 08:42:23

标签: xamarin.forms prism dryioc

我使用Visual Studio for Mac的Prism Template Pack生成一个新项目(尝试共享和pcl),然后更新到7.0.0.340-ci。是否按照惯例注册视图模型?

当我尝试运行此应用时,会抛出此异常:Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of application launch.

以下是主应用的代码。

    public partial class App : PrismApplication
    {
        public App(IPlatformInitializer initializer = null) : base(initializer) { }

        protected override void OnInitialized()
        {
            InitializeComponent();

            NavigationService.NavigateAsync("MainPage?title=Hello%20from%20Xamarin.Forms");
        }

        protected override void RegisterTypes(Prism.Ioc.IContainerRegistry containerRegistry)
        {
            Prism.Mvvm.ViewModelLocationProvider.Register<MainPage,MainPageViewModel>();
        }

        //protected override void RegisterTypes()
        //{
        //    Container.RegisterTypeForNavigation<MainPage>();
        //}
    }

由于签名不兼容,我不得不注释掉底线并重做覆盖。

Container.RegisterTypeForNavigation去了哪里或它的替代品是什么?

我也尝试过在RegisterTypes方法中没有任何代码。

在探索NavigationService属性的调试会话中,MainPage为null。

1 个答案:

答案 0 :(得分:0)

RegisterTypes方法应如下所示。 在棱镜表单7.x中,用于导航的页面必须通过RegisterForNavigation <>()或RegisterForNavigation()进行注册。

    protected override void RegisterTypes(Prism.Ioc.IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<MainPage,MainPageViewModel>();
    }