【问题标题】:How to load data in TabbedPage when a tab is clicked?单击选项卡时如何在 TabbedPage 中加载数据?
【发布时间】:2018-12-29 10:53:35
【问题描述】:

我正在使用TabbedPage 进行标签导航。我所有的Page 类都只有一个空的默认构造函数,我将数据加载到OnAppearing 方法中。我有 5 个标签。当我点击第二个标签时,第 3、4、5 页的OnAppearing 方法也会被调用。

如何确保仅在单击选项卡时才加载数据?

【问题讨论】:

  • 您必须对选项卡栏的 OnCurrentPageChanged 做出反应,仅在添加新选项卡时在启动时忽略它。之后,例如,您可以根据此事件向页面发送消息,或从您的子类标签页调用它们的代码。

标签: forms xamarin tabbedpage


【解决方案1】:

解决方案:

您可以在OnCurrentPageChanged方法中获取currentPage的索引,如果索引等于1(第二页),则使用messagecenter向页面发送消息。参考以下代码。

在标签页中

protected override void OnCurrentPageChanged()
{
   base.OnCurrentPageChanged();

   int index = Children.IndexOf(CurrentPage);

   if (index == 1)
   {
      MessagingCenter.Send<Object>(this, "click_second_tab");
   }

   else if (index == 2)
   {
      MessagingCenter.Send<Object>(this, "click_third_tab");
   }


} 

在第二页中。将加载数据的代码从 onAppearing 移到构造函数中

public MyPage1()
{

  //...
  MessagingCenter.Subscribe<Object>(this, "click_second_tab", (obj) =>
  {
     //load your data here

      Console.WriteLine("11111");
  });

} 

【讨论】:

  • 澄清这是如何工作的:MessagingCenter.Subscribe 代码不会立即加载数据 - 它的作用是在 MessagingCenter 中保存一个包含以 //load your data here 开头的代码的操作。稍后当对应的MessagingCenter.Send 发生时,该动作被执行,因此数据被加载。
猜你喜欢
  • 2016-04-09
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多