是什么导致我的导航无法在Xamarin中使用Prism?

时间:2019-07-17 14:37:18

标签: c# xamarin prism autofac

使用带有AutoFac的Xamarin.Forms 4.0和Prism 7.1.04,我无法导航到堆栈中的最后一页。我已经在App.xaml.cs中注册了所有页面。导航到最后一页成功。在最后一页上调用NavigationAsync时,将同时输入Page和ViewModel的构造函数,但该页面不会呈现。

我尝试过的不起作用的事情:

  • 从呼叫中删除参数。
  • 将“ ItemDetailsPage”更改为 “ / ItemDetailsPage”或“ NavigationPage / ItemDetailsPage”。
  • useModalNavigation: true添加到呼叫中。
  • 使用NavigateAsync导航到上一个页面。

我可以使用NavigationService通过GoBackAsync向后导航。

在App.xaml.cs中,我注册了以下类型:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
            // Register Pages for Navigation
            containerRegistry.RegisterForNavigation<NavigationPage>();
            containerRegistry.RegisterForNavigation<LoginPage, LoginViewModel>();
            containerRegistry.RegisterForNavigation<CustomerSearchPage, CustomerSearchViewModel>();
            containerRegistry.RegisterForNavigation<ConsentPage, ConsentViewModel>();
            containerRegistry.RegisterForNavigation<RequestPage, RequestViewModel>();
            containerRegistry.RegisterForNavigation<BankContextPage, BankContextViewModel>();
            containerRegistry.RegisterForNavigation<CollectionEventsPage, CollectionEventsViewModel>();
            containerRegistry.RegisterForNavigation<CollectionDetailsPage, CollectionDetailsViewModel>();
            containerRegistry.RegisterForNavigation<CollectionItemsListPage, CollectionItemsListViewModel>();
            containerRegistry.RegisterForNavigation<ItemDetailsPage, ItemDetailsViewModel>();
            // ...
}

工作流程从LoginPage开始,以线性方式从一个页面前进到另一页面,直到到达第八页。由于某种原因,我无法导航到第九页。

App.xaml.cs: await NavigationService.NavigateAsync("NavigationPage/LoginPage");
LoginPage.xaml.cs: await NavigationService.NavigateAsync("CustomerSearchPage");
CustomerSearchViewModel.cs: await NavigationService.NavigateAsync("ConsentPage");
ConsentViewModel.cs: 
                var parameters = new NavigationParameters();
                parameters.Add("consent", consent);
                await NavigationService.NavigateAsync("RequestPage", parameters);
RequestViewModel.cs: await NavigationService.NavigateAsync("BankContextPage");
BankContextPageViewModel.cs: await NavigationService.NavigateAsync("CollectionEventsPage", parameters);
CollectionEventsViewModel.cs: var ret = await NavigationService.NavigateAsync("CollectionItemsListPage");
CollectionItemsListViewModel.cs: status = await NavigationService.NavigateAsync("ItemDetailsPage”, parameters); //This fails

这是否意味着我的内存不足?

调试时,调试器中的行为就像我离开了CollectionEventsViewModel。该视图模型中不再包含任何调试信息。

的调用没有返回值
status = await NavigationService.NavigateAsync("ItemDetailsPage”); 

也没有捕获异常。我正在iOS和Android的Mac上开发此应用程序。单步执行代码似乎并不能告诉我一切。我不确定哪种诊断工具可以告诉我更多信息。

1 个答案:

答案 0 :(得分:0)

可能在最后一页中,您在xaml或类似内容中存在一些错误,我曾经遇到这个问题,这是因为我为标签定制了渲染,而在iOS渲染中我没有检查null ,这导致页面无法呈现,而且即使不是问题,也要花几个小时才解决,这是导航问题,因此请确保您没有任何UI错误(错误的绑定,空的绑定,错误的语法,等等)。