Xamarin Forms Navigation.PushAsync 仅工作一次

Posted

技术标签:

【中文标题】Xamarin Forms Navigation.PushAsync 仅工作一次【英文标题】:Xamarin Forms Navigation.PushAsync works only once 【发布时间】:2020-02-25 15:06:47 【问题描述】:

在我们的 Xamarin Forms 应用程序中,我们有多个页面。当我们第一次从主导航页面导航到另一个页面时,它会按预期工作。然后,当我们使用后退按钮(在应用程序或 android 系统按钮中)并再次导航到下一页时,它不会加载。它更改了标题,但显示了一个空白页面。

您使用哪个页面作为要转到的第一页以及要转到的第二页是哪个页面都没有关系。如果第一页和第二页是同一页,它也不起作用。

在应用程序中我们初始化主页如下:

MainPage = new NavigationPage(new MainPage());

MainPage 是一个 TabbedPage。

我们只是这样导航:

if (Application.Current.MainPage is NavigationPage mainPage)

    await mainPage.Navigation.PushAsync(new DetailPage());

这以前有效,但我认为在将 Xamarin.Forms 从 4.2.0.848062 更新到 4.3.0.947036 期间它坏了。但我找不到任何可以阻止这就是发行说明。

== 编辑 ==

我们发现所有导航调用都存在一些不一致的情况。所以我们创建了一个帮助类来完成所有的导航。现在看起来像这样:

    public static class NavigationHelper

    public static void NavigateTo(Page page)
    
        if (Application.Current.MainPage is NavigationPage mainPage)
        
            Device.BeginInvokeOnMainThread(async () =>
            
                await mainPage.Navigation.PushAsync(page);
            );
        
    

所以我们现在只能这样导航:

NavigationHelper.NavigateTo(new DetailPage());

但这仍然不能解决问题。第一次我们得到正确的页面,第二次导航我们得到一个空屏幕。导航栏中的标题正在更改为我们导航到的页面标题。但其余的都是空的。

【问题讨论】:

可以看到导航的结果,var result = await mainPage.Navigation.PushAsync(new DetailPage());然后检查结果,看看是否有任何异常 当我尝试做 var result = await mainPage.Navigation.PushAsync(new DetailPage());它给出了错误:'无法将 void 分配给隐式类型的变量'。 Xamarin.Forms.INavigation.PushAsync(Page page) 是一个任务。 对不起,我错了,PushAsync() 返回 void,这就是为什么你不能这样做,我正在将 prism 导航界面与此混合 ***.com/help/minimal-reproducible-example 这是个好主意。刚刚创建了一个新的选项卡式应用程序,将主页设置更改为 MainPage = new NavigationPage(new MainPage());,添加了导航助手并使用它来导航。没有问题。但是所以我仍然不知道为什么它在我们的应用程序中不起作用。 【参考方案1】:

你还记得使用 (NavigationPage)Application.Current.MainPage 的“导航”吗? - 而不是当前页面导航?

【讨论】:

是的,我已经编辑了代码以显示我们用来导航的整个代码。【参考方案2】:

我在一些帮助下找到了它。在输出窗口中,我们找到了消息

System.ObjectDisposedException:无法访问已处置的对象。

这发生在我们返回上一页并且无法转到下一页时。原来是视图模型中的错误。我们试图将项目添加到已经处理的可观察列表中。修复此问题修复了导航问题。

【讨论】:

是的,只有两天后。所以我明天会这样做。

以上是关于Xamarin Forms Navigation.PushAsync 仅工作一次的主要内容,如果未能解决你的问题,请参考以下文章

我们可以覆盖 Xamarin.forms 中的 NAVIGATION BACK BUTTON 按下吗?

Xamarin.Forms学习之Page Navigation

Xamarin Forms Navigation.PushAsync 仅工作一次

Xamarin.Forms - 页面缓存

TabbedPage 中的 Xamarin Forms Prism Navigation 表现为 PushModelAsync 或导航栏消失

Xamarin.forms 页面之间导航的自定义动画?