Я пытаюсь использовать новый компонент Xamarin.Forms.Shell в моем приложении для отображения динамического c нижнего TabBar, однако при моих попытках он, похоже, игнорирует использование атрибута BindableLayout. Вполне возможно, что я просто использую это неправильно, но я попробовал это несколькими способами.
Я использую Prism MVVM в качестве фреймворка для просмотра моделей. Просмотреть код модели:
public class MainPageShellViewModel : ViewModelBase
{
public MainPageShellViewModel(INavigationService navigationService)
: base(navigationService)
{
Tabs = new List<AppMenuItem>
{
new AppMenuItem
{
Title = "Comms Page", Icon = IconFont.MdiNewspaper,
Page = new DataTemplate(typeof(Comms))
},
new AppMenuItem
{
Title = "People Page", Icon = IconFont.MdiCalendar,
Page = new DataTemplate(typeof(People))
}
};
}
public List<AppMenuItem> Tabs { get; set; }
}
Просмотреть XAML:
<Shell
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="http://prismlibrary.com"
xmlns:pages="clr-namespace:MSS_Prism_Test.Views"
xmlns:icons="clr-namespace:MSS_Prism_Test"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="MSS_Prism_Test.Views.MainPageShell">
<TabBar
BindableLayout.ItemsSource="{Binding Tabs}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Tab Title="{Binding Title}">
<Tab.Icon>
<FontImageSource FontFamily="{StaticResource MaterialFontFamily}" Glyph="{Binding Icon}"/>
</Tab.Icon>
<ShellContent ContentTemplate="{Binding Page}" />
</Tab>
</DataTemplate>
</BindableLayout.ItemTemplate>
</TabBar>
Я также использую значки шрифтов материалов для отображения изображений значков в сочетании с stati c класс для ссылки на правильные шестнадцатеричные значения шрифта в форме IconFont.cs.
По любой причине, если я создаю stati c TabBar с элементами Tab в XAML и заполняю все поля вручную, все работает хорошо. Однако при попытке сделать это динамически с помощью BindableLayout раскладка оболочки вообще не отображается, и все, что я получаю, это белый экран.
Спасибо!