Как загрузить данные в TabbedPage при нажатии на вкладку?

Я использую TabbedPage для навигации по вкладкам. Все мои Page классы имеют только пустой конструктор по умолчанию, и я загружаю свои данные в метод OnAppearing. У меня 5 вкладок. Как только я нажимаю на вторую вкладку, также вызываются OnAppearing методы 3-й, 4-й и 5-й страниц.

Как убедиться, что данные загружаются только при нажатии на вкладку?


person Community    schedule 29.12.2018    source источник
comment
Вы должны реагировать на OnCurrentPageChanged панели с вкладками, игнорируя его при запуске, когда просто добавляете новые вкладки. После этого вы можете, например, отправлять сообщения страницам об этом событии или вызывать их код из подкласса страницы с вкладками.   -  person Nick Kovalsky    schedule 29.12.2018


Ответы (1)


Решение:

Вы можете получить индекс currentPage в методе OnCurrentPageChanged. И если индекс равен 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");
  });

} 
person Lucas Zhang    schedule 01.01.2019