2017-04-03 120 views
0

我試圖構建一個包含幾個部分的頁面,其中兩個包含可從ListView context actions中受益的短名單。使用包含ListView的TableView看起來非常合適。但是,它似乎並不奏效。TableView中的Xamarin Forms ListView

TableView和ListView實現滾動的事實可能會導致該問題。在這個用例中,我不想讓ListView滾動。有沒有辦法在TableView中嵌套ListView?有沒有其他方法來呈現這種UI?

回答

0

滾動無疑是這種方法的一個問題,兩種控件不能很好地混合在一起。

如果你想要標題的部分,使用分組ListView是最有可能的最好的方法。您需要先將數據分組。下面是一個例子。

public class PersonList : List<Person> 
{ 
    public string Heading { get; set; } 
    public List<Person> Persons => this; 
} 

然後在您的ListView中,您需要通過IsGroupingEnabled啓用分組,然後提供GroupHeaderTemplate。取自

<ListView ItemsSource="{Binding MyGroupedData}" 
      IsGroupingEnabled="true"> 
    <ListView.GroupHeaderTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <Label Text="{Binding Heading}" /> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.GroupHeaderTemplate> 

    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 

      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

例如:如果您指定一個固定的ListView.RowHeight,不要使用頁眉或頁腳Xamarin Forms ListView Grouping

+0

由於ListView組的外觀與TableView部分不同,如果應用程序的其他部分使用TableViews,則具有ListView hack的頁面的UI將不一致。根本問題在於兩部分中的數據集合在本質上是不同的,這與分組習慣用來表達的內容相反。 –

+0

但是,您可以更改ListView中標題的外觀和風格,以供選擇。關於對不同類型的數據進行分組,您可以使用DataTemplateSelector。否則,唯一的另一種選擇是創建自定義的StackLayout或Grid或自定義的TableViewCell,並手動創建ContextActions的全部功能。 –

+0

這兩個選項都不容易。 :-(試圖在所有平臺和操作系統版本中模擬TableView的本地用戶界面標題聽起來像很多工作,同樣適用於重新實現ContextActions –

0

,事實證明,將的ListView滾動型的另一個內工作(如包含在TableView中)。用戶體驗並不完美:如果ListView接收到滾動手勢,但外部視圖不需要滾動,則ListView會向用戶提供可滾動的錯誤反饋。例如,您可以在Xamarin Evolve應用程序中看到此內容。

ListView在這種情況下工作,因爲它可以快速計算其高度。如果行高不一致並且事先已知,ListView會告訴它的容器它與頁面一樣高,外部ScrollView以面值表示。

這個限制通常不會太差。如果您沒有固定高度的行,則上下文操作可能無論如何總是看起來不錯,而不同的設計方法(例如在詳細信息頁上放置命令)可能是更好的選擇。

另一個問題是,你在0123.在iOS的TableView,除非你願意自己測量高度。另一種分組方法是使用框架。