Xamarin.Forms 将 Children 个页面添加到 TabbedPage

Xamarin.Forms Adding Children Pages to TabbedPage

我的应用程序主页是一个 TabbedPage

我有三个标签:

支付、配置、维护

其中一个选项卡由设置控制是否显示。当它更改为 false 时,我通过执行以下操作删除选项卡:

tabPage.Children.Remove(ConfigTab);

此删除工作正常。如果我重新打开标签,我可以使用以下代码添加标签:

tabPage.Children.Add(ConfigTab);

但是它被添加到列表的末尾并且缺少导航 header:

我查看了使用 Insert 方法,我可以在其中指定索引

tabPage.Children.Insert(1,ConfigTab);

但这会使应用程序崩溃并显示以下消息:

Unhandled Exception: Java.Lang.IndexOutOfBoundsException: Invalid index 2, size is 2

如果我当时检查 children 它已将页面添加到正确的索引

关于如何向 TabbedPage 动态插入新页面有什么建议吗?并保留导航?

更新:

我现在已经通过执行以下操作使其正常工作:

var paymentPage = tabPage.Children.FirstOrDefault(p=> p.ClassId == "PaymentNavPage");
var configPage = GetConfigPage();
var maintenancePage = tabPage.Children.FirstOrDefault(p => p.ClassId == "MaintaintNavPage");

// Clear old Tabgs
tabPage.Children.Clear();

// Put pages back
tabPage.Children.Add(paymentPage);
tabPage.Children.Add(configPage);
tabPage.Children.Add(maintenancePage);              

如果有更好的方法使用 Insert 方法然后重置导航堆栈,我仍然很感兴趣。

我在使用 Insert to the Children 时遇到了同样的事情。您的解决方案似乎是隐藏和显示页面的唯一选择。我建议将页面分配给变量,这样您就不必在每次访问 hiding/showing ConfigPage 时都循环遍历子项。根据名称,我假设这些页面彼此不同。

在类似页面的情况下,ItemsSource 可以在 DataTemplate 的帮助下使用。将 ItemsSource 绑定到 ObservableCollection 时,隐藏和显示页面只需要修改该集合。可以在此处找到更多相关信息:

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/tabbed-page/#Populating_a_TabbedPage_with_a_Template

下一个代码适合我:

tabPage.Children.Insert(1,ConfigTab);