2017-04-03 58 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,除非你愿意自己测量高度。另一种分组方法是使用框架。