2017-09-08 62 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