【发布时间】:2019-07-17 23:43:23
【问题描述】:
使用带有 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”);
也没有捕获到异常。我正在 Mac 上为 iOS 和 Android 开发这个应用程序。单步执行代码似乎并不能告诉我一切。我不确定哪些诊断工具可能会告诉我更多信息。
【问题讨论】:
-
可能在最后一页中,您在 xaml 或类似内容中有一些错误,我曾经遇到过这个问题,这是因为我有一个标签的自定义渲染,而在 iOS 渲染中我没有t 检查 null 或类似的东西,这导致页面不呈现,我虽然几个小时都认为这是一个导航问题,但实际上不是,所以请确保你没有任何 UI 错误问题, (不正确的绑定、空绑定、不正确的语法等等)
-
这个问题之前确实出现在这个页面上,因为我认为我有太多的绑定。我将还原我的代码并进一步调查这条路线
-
@RicardoDiasMorais 你是对的。我正在将一个条目绑定到一个双重属性。当我将其更改为字符串属性时,我能够导航到该页面。将您的评论更改为答案,我会给您信用。
-
做到了,谢谢 :) 很高兴我能提供帮助