我在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
方法。 (希望这很有意义)
答案 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();
}
}