我有一个详细信息列表(篮子),在每个细节中,是另一个列表(水果)。我想显示这些细节,我想到的第一件事是ListView中的ListView。但是在查看建议时,给了我this和this等结果,这些结果主要表明在Xamarin Forms中实现它并不是一个好主意。
目前,我正在使用FreshMvvM作为我的MvvM框架。至于我想要显示的数据,我有一套篮子,每个篮子有几个水果。我想要显示那些水果的图像,这属于特定的篮子。请参考图片。
我想知道是否有改进或其他任何布局的想法,如何实现我的列表或任何其他方式来实现上述行为。谢谢。
到目前为止我的代码:
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; }
}
答案 0 :(得分:1)
您可以使用ListView
遍历baskets集合,同时使用自定义控件(如ItemsControl
)来迭代水果集合。
它基本上是一个自定义控件,允许您向StackLayout
到ItemsSource
和ItemTemplate
属性添加动态子支持。您可以按原样使用控件 - 除非您需要在此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
集合中的项目数量相对较低。