TabbedPage的子项中的OnAppearing仅触发一次

时间:2017-01-09 08:57:15

标签: c# xamarin xamarin.forms

我在TabbedPage中有一个Xamarin.Forms

public partial class MainPage : TabbedPage
{
   public MainPage()
   {
      InitializeComponent();

       var playPage = new NavigationPage(new PlayPage())
       {
          Title = "Play",
          Icon = "play1.png"
       };
       var settingsPage = new NavigationPage(new SettingsPage())
       { 
          Title = "Settings",
          Icon = "settings.png"
        };
        var aboutPage = new NavigationPage(new AboutPage())
        {
           Title = "About",
           Icon = "about.png"
        };
        Children.Add(playPage);
        Children.Add(settingsPage);
        Children.Add(aboutPage);
    }

每个子页面都是ContentPage,它会覆盖OnAppearing方法。当我在选项卡之间导航时,我的子页面内容没有正确更新,进一步的调试告诉我,子页面的OnAppearing方法只被调用一次(首次加载MainPage时)。

任何人都知道为什么OnAppearing方法只调用一次?我该如何解决这个问题?

更多信息

我的子页面SettingsPage包含使用ContentPage方法触发另一个Navigation.PushAsync时触发的事件。我希望在从标签页和这些标签页中的导航页面切换时也可以调用OnAppearing方法。 (希望这很有意义)

2 个答案:

答案 0 :(得分:2)

它只触发一次,因为当您在标签之间导航时,View不会被销毁。

您可以使用url:'{{URL("/home/getcustomernameaddress")}}',事件来确定页面已更改并发出更改后的视图,并对您需要的视图进行更新。

CurrentPageChanged

然后在你的页面中:

this.CurrentPageChanged += PageChanged;

void PageChanged(object sender, EventArgs args)
{
    var currentPage = CurrentPage as MyTabPage;
    currentPage?.UpdateView();
}

答案 1 :(得分:0)

请勿将ContentPage嵌入“单一”级NavigationPage

以下在标签之间切换OnAppearing事件时,以下工作正常:

public class PlayPage : ContentPage
{
    protected override void OnAppearing()
    {
        System.Diagnostics.Debug.WriteLine("PlayPage");
        base.OnAppearing();
    }
}
public class AboutPage : ContentPage
{
    protected override void OnAppearing()
    {
        System.Diagnostics.Debug.WriteLine("AboutPage");
        base.OnAppearing();
    }
}
public class SettingsPage : ContentPage
{
    protected override void OnAppearing()
    {
        System.Diagnostics.Debug.WriteLine("SettingPage");
        base.OnAppearing();
    }
}

public partial class MainPage : TabbedPage
{
    public MainPage()
    {
        var playPage = new PlayPage() { Title = "Play" };
        var settingsPage = new SettingsPage() { Title = "Settings" };
        var aboutPage = new AboutPage() { Title = "About" };
        Children.Add(playPage);
        Children.Add(settingsPage);
        Children.Add(aboutPage);
    }
}

public class App : Application
{
    public App()
    {
        this.MainPage = new MainPage(); 
    }
}