如何绑定类型为<;的选项卡项列表;贝壳含量>;使用xamarin.forms-shell在XAML中动态地和

如何绑定类型为<;的选项卡项列表;贝壳含量>;使用xamarin.forms-shell在XAML中动态地和,xamarin.forms,xamarin.forms.shell,Xamarin.forms,Xamarin.forms.shell,如何通过考虑MVVM模式的数据绑定动态添加ShellContent类型的项。我想将最后一个TabViewModels绑定到Tab.Items集合。不是我无法测试的代码 我希望在运行时绑定任意数量的ShellContent对象,而不是6个 MainPage.xaml <FlyoutItem Route="animals" Title="Animals" FlyoutDisplayOptions="AsSingleItem">

如何通过考虑MVVM模式的数据绑定动态添加ShellContent类型的项。我想将最后一个TabViewModels绑定到Tab.Items集合。不是我无法测试的代码

我希望在运行时绑定任意数量的ShellContent对象,而不是6个

MainPage.xaml

<FlyoutItem Route="animals"
                Title="Animals"
                FlyoutDisplayOptions="AsSingleItem">
        <Tab Title="Domestic"
             Route="domestic"
             Icon="paw.png">

            <Tab.Items>

                <ShellContent Route="cats"
                          Style="{StaticResource DomesticShell}"
                          Title="sisi"
                          Icon="cat.png"
                          ContentTemplate="{DataTemplate views:CatsPage}" />
                <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
                <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
                <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
                <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
                <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
            </Tab.Items>


        </Tab>
</FlyoutItem>

您可以为您的
选项卡添加属性
x:Name=“myTab”
,并使用函数
void add(T项)
将子项添加到
选项卡中。例如:

   <FlyoutItem Route="animals" x:Name="mFlyoutItem"
                Title="Animals"
                FlyoutDisplayOptions="AsMultipleItems">
        <Tab Title="Domes.123"
             Route="domestic"
             x:Name="myTab"
             Icon="paw.png">
            <Tab.Items>
            <ShellContent Route="cats"
                          Style="{StaticResource DomesticShell}"
                          Title="Cats"
                          Icon="cat.png"
                          ContentTemplate="{DataTemplate views:CatsPage}" />
            <ShellContent Route="dogs"
                          Style="{StaticResource DomesticShell}"
                          Title="Dogs"
                          Icon="dog.png"
                          ContentTemplate="{DataTemplate views:DogsPage}" />
            </Tab.Items>
        </Tab>
   </FlyoutItem>
如果要更改
ShellContent
(例如
标题
)的属性,可以使用以下代码:

ShellContent shellContent = new ShellContent();
shellContent.Content = new DogsPage();
shellContent.Title = "testTitle";

myTab.Items.Add(shellContent);
更新

对于
ShellContent.BindingContext
,您可以参考此问题:

此错误已经修复,因此我们需要将
Xamarin表单
更新到最新版本

示例代码是:

  <TabBar>
    <Tab >
        <ShellContent >
            <ShellContent.ContentTemplate>
                <DataTemplate>
                    <local:Page1 BindingContext="{Binding Page1VM}"/>
                </DataTemplate>
            </ShellContent.ContentTemplate>
        </ShellContent>
    </Tab>
</TabBar>


看来我应该说得更清楚些。因此,我重新表述了我的标题/问题。@Pascal我已经更新了答案,您可以检查一下。我假设Page1VM不是包含tabviewmodels的Items集合,对吗?因为那对我来说没用。
  <TabBar>
    <Tab >
        <ShellContent >
            <ShellContent.ContentTemplate>
                <DataTemplate>
                    <local:Page1 BindingContext="{Binding Page1VM}"/>
                </DataTemplate>
            </ShellContent.ContentTemplate>
        </ShellContent>
    </Tab>
</TabBar>