2017-09-08 64 views
0

我有一个详细信息列表(篮子),并在每个细节,是另一个列表(水果)。我想要显示这些细节,并且我首先想到的是ListView内的ListView。但是,当通过建议看,给了我的结果,如thisthis这大多表明,这是不是一个好主意,实施Xamarin形式。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; } 
} 
+0

您可能必须实现自定义渲染器,因为它在XF中实现的方式,嵌套列表至少会在Android上崩溃。 –

+0

@PaulKertscher是的我想尽可能减少崩溃的应用程序。如果可以的话,请向我展示一些可以帮助我创建自定义渲染器的指南/链接。谢谢。 – Curiousity

+1

请参阅https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/ - 有许多关于自定义渲染器的信息。不幸的是,我无法帮到你,因为我放弃了使用嵌套的ListView,并以另一种方式解决了我的问题。 –

回答

1

您可以使用ListView通过筐收集,遍历而使用像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集合中的项目数量会相对较低。

+0

谢谢您的详细解答。我会尝试这个并检查。 – Curiousity

+0

你能解释一下我应该使用'local'来引用吗?对不起,愚蠢的问题 – Curiousity

+1

所以我假设 - 你已经下载并将'ItemsControl'类添加到你的项目。现在,您必须声明您使用的名称空间 - https://developer.xamarin。com/guides/xamarin-forms/xaml/namespaces /#Declaring_Namespaces_for_Types – Ada