我正在尝试构建一个包含几个部分的页面,其中两个部分包含可从ListView context actions中受益的短列表。使用包含ListViews的TableView似乎非常合适。但是,它似乎无法发挥作用。
TableView和ListView实现滚动的事实可能导致问题。在这个用例中,我不希望ListViews滚动。有没有办法在TableView中嵌套ListView?有没有其他方法来呈现这种UI?
答案 0 :(得分: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>
答案 1 :(得分:0)
如果您指定固定的ListView.RowHeight
并且不使用页眉或页脚,则会发现ListView将在另一个ScrollView中运行(例如包含在TableView中)。用户体验并不完美:如果ListView收到滚动手势但外部视图不需要滚动,则ListView会向用户提供可以滚动的错误反馈。例如,您可以在Xamarin
Evolve应用中看到这一点。
ListView适用于这种情况,因为它可以快速计算其高度。如果行高度不一致且事先已知,则ListView会告诉其容器它与页面一样高,外部ScrollView采用面值。
这种限制往往不是太糟糕。如果您没有固定高度的行,那么上下文操作可能并不总是看起来很好,并且不同的设计方法(例如将命令放在详细信息页面上)可能是更好的选择。
另一个问题是你在iOS上的TableView中can't put variable-sized cells,除非你愿意自己测量身高。另一种分组方法是使用Frames。