C# Xamarin表单-实现嵌套列表
我有一个详细清单(篮子),在每个细节中,都有另一个清单(水果)。我想显示这些细节,我想到的第一件事是ListView中的ListView。但是,当查看建议时,给了我诸如和之类的结果,这主要表明以Xamarin形式实现不是一个好主意 目前,我正在使用FreshMvvM作为我的MvvM框架。至于我想显示的数据,我有一套篮子,每个篮子有几个水果。我希望这些水果的图像也能展示出来,它们属于一个特定的篮子。请参考图片 我想知道这方面是否有改进,或者关于如何实现我的列表的布局的任何其他想法,或者实现上述行为的任何其他方式。多谢各位 到目前为止我的代码:C# Xamarin表单-实现嵌套列表,c#,xamarin,mvvm,xamarin.forms,freshmvvm,C#,Xamarin,Mvvm,Xamarin.forms,Freshmvvm,我有一个详细清单(篮子),在每个细节中,都有另一个清单(水果)。我想显示这些细节,我想到的第一件事是ListView中的ListView。但是,当查看建议时,给了我诸如和之类的结果,这主要表明以Xamarin形式实现不是一个好主意 目前,我正在使用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>
您可以使用
ListView
遍历篮子集合,同时使用自定义控件(如遍历水果集合)
它基本上是一个自定义控件,允许您通过ItemsSource
和itemstemplate
属性向StackLayout
添加动态子级支持。您可以按原样使用控件-除非此时需要将其StackLayout上的方向
属性设置为水平
示例用法:
<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
适合于仅用于小集合,因为虚拟化/回收支持并不十分复杂。我假设,由于布局是水平的,水果
集合中的项目数量相对较低
您可能必须实现自定义渲染器,因为它在XF中的实现方式,嵌套列表至少会在Android上崩溃。@PaulKertscher是的,我希望应用程序崩溃越少越好。如果可以,请向我展示一些指导原则/链接,帮助我创建自定义渲染器。谢谢。请看-有很多关于自定义渲染器的信息。不幸的是,除此之外,我无法为您提供更多帮助,因为我放弃了使用嵌套的
ListView
s,并用另一种方式解决了我的问题。谢谢您提供的信息@PaulKertscher。另外,如果我可以问一下,除了使用嵌套的ListView之外,还有什么其他可能的方法来实现上述行为?谢谢您的详细回答。我会试试看。你能用local
解释一下我应该指的是什么吗?很抱歉提出了这个愚蠢的问题,所以我假设您已经下载了ItemsControl
类并将其添加到您的项目中。现在,您必须声明您使用的名称空间-谢谢。成功了。但是,我想知道是否可以用其他元素替换
。例如,另一个StackLayout
或TextCell
和一个ImageCell
,因为使用这些元素不会在appYes中显示任何内容-您可以将其替换为可以添加到StackLayout的任何元素
<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>