TableView中的Xamarin Forms ListView
我试图构建一个包含几个部分的页面,其中两个包含可从ListView context actions中受益的短名单。使用包含ListView的TableView看起来非常合适。但是,它似乎并不奏效。TableView中的Xamarin Forms ListView
TableView和ListView实现滚动的事实可能会导致该问题。在这个用例中,我不想让ListView滚动。有没有办法在TableView中嵌套ListView?有没有其他方法来呈现这种UI?
滚动无疑是这种方法的一个问题,两种控件不能很好地混合在一起。
如果你想要标题的部分,使用分组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
,事实证明,将的ListView滚动型的另一个内工作(如包含在TableView中)。用户体验并不完美:如果ListView接收到滚动手势,但外部视图不需要滚动,则ListView会向用户提供可滚动的错误反馈。例如,您可以在Xamarin Evolve应用程序中看到此内容。
ListView在这种情况下工作,因为它可以快速计算其高度。如果行高不一致并且事先已知,ListView会告诉它的容器它与页面一样高,外部ScrollView以面值表示。
这个限制通常不会太差。如果您没有固定高度的行,则上下文操作可能无论如何总是看起来不错,而不同的设计方法(例如在详细信息页上放置命令)可能是更好的选择。
另一个问题是,你在0123.在iOS的TableView,除非你愿意自己测量高度。另一种分组方法是使用框架。
由于ListView组的外观与TableView部分不同,如果应用程序的其他部分使用TableViews,则具有ListView hack的页面的UI将不一致。根本问题在于两部分中的数据集合在本质上是不同的,这与分组习惯用来表达的内容相反。 –
但是,您可以更改ListView中标题的外观和风格,以供选择。关于对不同类型的数据进行分组,您可以使用DataTemplateSelector。否则,唯一的另一种选择是创建自定义的StackLayout或Grid或自定义的TableViewCell,并手动创建ContextActions的全部功能。 –
这两个选项都不容易。 :-(试图在所有平台和操作系统版本中模拟TableView的本地用户界面标题听起来像很多工作,同样适用于重新实现ContextActions –