Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin表单-实现嵌套列表_C#_Xamarin_Mvvm_Xamarin.forms_Freshmvvm - Fatal编程技术网

C# Xamarin表单-实现嵌套列表

C# Xamarin表单-实现嵌套列表,c#,xamarin,mvvm,xamarin.forms,freshmvvm,C#,Xamarin,Mvvm,Xamarin.forms,Freshmvvm,我有一个详细清单(篮子),在每个细节中,都有另一个清单(水果)。我想显示这些细节,我想到的第一件事是ListView中的ListView。但是,当查看建议时,给了我诸如和之类的结果,这主要表明以Xamarin形式实现不是一个好主意 目前,我正在使用FreshMvvM作为我的MvvM框架。至于我想显示的数据,我有一套篮子,每个篮子有几个水果。我希望这些水果的图像也能展示出来,它们属于一个特定的篮子。请参考图片 我想知道这方面是否有改进,或者关于如何实现我的列表的布局的任何其他想法,或者实现上述行

我有一个详细清单(篮子),在每个细节中,都有另一个清单(水果)。我想显示这些细节,我想到的第一件事是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>