【问题标题】:UWP: Xamarin Forms Tabbed Page changing page doesn't call OnAppearingUWP:Xamarin 表单选项卡式页面更改页面不调用 OnAppearing
【发布时间】:2017-06-15 15:23:32
【问题描述】:

在 Xamarin Forms 项目中,我创建了一个 TabbedPage,在其中添加了 5 个子导航页。

{
    Children.Add(new NavigationPage(new A()));
    Children.Add(new NavigationPage(new B()));
    Children.Add(new NavigationPage(new C()));
    Children.Add(new NavigationPage(new D()));
    Children.Add(new NavigationPage(new E()));
}

当我从选项卡 A 手动单击选项卡 B 时; B 的 OnAppearing 方法按预期调用。但是,当我使用

以编程方式更改选项卡时
tabbedPage.CurrentPage = tabbedPage.Children[index]

然后 B 的 OnAppearing 方法永远不会被调用。这发生在 UWP 上。

【问题讨论】:

  • 好像我有类似的问题,你每个页面上的视图模型是否执行非本地数据?
  • 为此我们没有使用MVVM,我们只是简单地使用MVC。当我们手动更改选项卡时,将调用所选选项卡的 onappearing 方法,但是当我们以编程方式更改选项卡时,不会为所选选项卡调用 onappearing 方法
  • 我已将此行代码(this.CurrentPage = this.Children[2];)放在TabbedPage构造函数方法中。但是我无法在我身边重现您的问题。这是我的code sample。请检查。
  • @NicoZhu-MSFT 谢谢,您的代码在这种情况下工作。在应用启动时,它会选择第三页并调用其 OnAppearing。但是我修改了你的代码来复制我的场景。在第一页上有一个按钮“单击我”我输入代码以在此按钮单击时显示第三页。单击按钮时,用户会从 First 重定向到第三页,但根本不会调用 Third 的 OnAppearing() 方法。请检查。 (让我知道我是否可以在您的仓库中提交我的更改供您测试)
  • @NicoZhu-MSFT 您有机会寻找问题吗?

标签: tabs uwp xamarin.forms tabbedpage


【解决方案1】:

从 Xamarin Forms 3.4.0.1008975 和 UWP 6.1.5 开始,这似乎仍然是一个问题。我是这样解决的:

创建一个名为 IAppearable 的接口:

internal interface IAppearable
{
    void HandleAppearing();
}

让你的内容页面实现这个接口:

public partial class MyContentPage : ContentPage, IAppearable

在 HandleAppearing 中执行您在 OnAppearing 中会执行的操作:

public void HandleAppearing()
    {
        // do appearing stuff here
    }

在您以编程方式设置标签页后,使用以下代码:

CurrentPage = Children[pageIndex];

if (Device.RuntimePlatform == Device.UWP)
{
    if (CurrentPage is IAppearable appearablePage)
    {
        appearablePage.HandleAppearing();
    }
}

【讨论】:

  • 我在使用 XF v4.0 时遇到了这个问题。您有报告的错误的链接吗?
  • 2019 年 7 月也是如此。任何报告的错误?
  • 这仍然是 2021 年的事情。问题已创建 github.com/xamarin/Xamarin.Forms/issues/3855 在 Xamarin 方面似乎很难修复。尽管如此,@kip-morgan 方法似乎是这里最好的方法。唯一的问题是,谁应该负责触发HandleAppearing()。就我而言,我是在 OnCurrentPageChanged 中完成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多