Xamarin表单 - 实现嵌套列表

时间:2017-09-08 05:22:32

标签: c# xamarin mvvm xamarin.forms freshmvvm

我有一个详细信息列表(篮子),在每个细节中,是另一个列表(水果)。我想显示这些细节,我想到的第一件事是ListView中的ListView。但是在查看建议时,给了我thisthis等结果,这些结果主要表明在Xamarin Forms中实现它并不是一个好主意。

目前,我正在使用FreshMvvM作为我的MvvM框架。至于我想要显示的数据,我有一套篮子,每个篮子有几个水果。我想要显示那些水果的图像,这属于特定的篮子。请参考图片。

enter image description here

我想知道是否有改进或其他任何布局的想法,如何实现我的列表或任何其他方式来实现上述行为。谢谢。

到目前为止我的代码:
XAML:

<ListView ItemsSource="{Binding Baskets}" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                    <Label Text="{Binding BasketID}" />
                    <ImageCell 
                        Text="{Binding FruitID}" 
                        Detail="{Binding FruitName}" 
                        ImageSource="{Binding ImageURL}">
                    </ImageCell>
                </StackLayout>
             </ViewCell>
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

课程:

public class Basket
{
    public string BasketID{ get; set; }
    public string BasketName{ get; set; }
}

public class Fruit
{
    public string FruitID{ get; set; }
    public string FruitName{ get; set; }
    public string ImageURL{ get; set; }
}

1 个答案:

答案 0 :(得分:1)

您可以使用ListView遍历baskets集合,同时使用自定义控件(如ItemsControl)来迭代水果集合。

它基本上是一个自定义控件,允许您向StackLayoutItemsSourceItemTemplate属性添加动态子支持。您可以按原样使用控件 - 除非您需要在此line的StackLayout上将Orientation属性设置为Horizontal

样本使用:

<ListView ItemsSource="{Binding Baskets}" HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                    <Label Text="{Binding BasketID}" />

                    <local:ItemsControl ItemsSource="{Binding Fruits}">
                        <local:ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Image Source="{Binding ImageURL}" />
                            </DataTemplate>
                        </local:ItemsControl.ItemTemplate>
                    </local:ItemsControl>
                </StackLayout>
             </ViewCell>
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
  

注意:ItemsControl仅适用于小型集合,因为虚拟化/回收支持不是很复杂。我假设,由于布局是水平的,Fruits集合中的项目数量相对较低。