【问题标题】:What causes my navigation to fail in Xamarin with Prism?是什么导致我在 Xamarin with Prism 中的导航失败?
【发布时间】: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 你是对的。我正在将一个条目绑定到一个双重属性。当我将其更改为字符串属性时,我能够导航到该页面。将您的评论更改为答案,我会给您信用。
  • 做到了,谢谢 :) 很高兴我能提供帮助

标签: c# xamarin prism autofac


【解决方案1】:

可能在最后一页中,您在 xaml 或类似内容中出现了一些错误,我曾经遇到过这个问题,这是因为我有一个标签的自定义渲染,而在 iOS 渲染中我没有检查 null ,这导致页面无法呈现,我虽然几个小时都认为这是一个导航问题,但实际上不是,所以请确保您没有任何 UI 错误,(不正确的绑定、空绑定、不正确的语法,随便)。

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 2017-01-21
    • 2018-11-30
    • 2011-04-04
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多