Xamarin在TableView中形成ListView

Xamarin在TableView中形成ListView,listview,xamarin.forms,tableview,Listview,Xamarin.forms,Tableview,我正在尝试构建一个包含几个部分的页面,其中两个包含短列表,这将从中受益。使用包含ListView的TableView似乎非常适合。然而,它似乎不起作用 TableView和ListView都实现了滚动,这一事实可能会导致这个问题。在这个用例中,我不希望ListView滚动。有没有办法将ListView嵌套到TableView中?有没有其他方法来呈现这种UI?滚动肯定是这种方法的一个问题,这两个控件不会很好地混合在一起 如果您想要有标题的部分,使用分组列表视图很可能是最好的方法 您需要首先对数据进

我正在尝试构建一个包含几个部分的页面,其中两个包含短列表,这将从中受益。使用包含ListView的TableView似乎非常适合。然而,它似乎不起作用


TableView和ListView都实现了滚动,这一事实可能会导致这个问题。在这个用例中,我不希望ListView滚动。有没有办法将ListView嵌套到TableView中?有没有其他方法来呈现这种UI?

滚动肯定是这种方法的一个问题,这两个控件不会很好地混合在一起

如果您想要有标题的部分,使用分组列表视图很可能是最好的方法

您需要首先对数据进行分组。下面是一个例子

public class PersonList : List<Person>
{
    public string Heading { get; set; }
    public List<Person> Persons => this;
}
公共类个人列表:列表
{
公共字符串标题{get;set;}
公开名单人员=>此;
}
然后,在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>


示例取自:

如果指定一个固定的
列表视图。行高
,并且不使用页眉或页脚,那么列表视图将在另一个滚动视图(例如包含在TableView中)中工作。用户体验并不完美:如果ListView收到滚动手势,但外部视图不需要滚动,ListView会给用户错误的反馈,说它可以滚动。例如,你可以在应用程序中看到这一点

ListView在这种情况下工作,因为它可以快速计算其高度。如果行高度不一致,并且事先知道,ListView会告诉其容器它与页面一样高,外部ScrollView按表面值进行处理

这种限制通常并不太坏。如果没有固定高度的行,上下文操作可能并不总是看起来很好,而另一种设计方法(例如在详细信息页面上放置命令)可能是更好的选择


另一个问题是,除非你愿意自己测量高度,否则你只能在iOS上查看桌面。分组的另一种方法是使用框架。

由于ListView组的外观与TableView部分不同,如果应用程序的其他部分使用TableView,则页面的UI与ListView hack不一致。根本问题是这两个部分中的数据集合根本不同,这与分组习惯用法的目的相反。您可以根据自己的选择更改ListView中标题的外观。关于分组不同类型的数据,可以使用DataTemplateSelector。否则,唯一的其他选择是创建自定义StackLayout或Grid,或自定义TableViewCell并围绕ContextActions手动创建整个功能。这两个选项似乎都不容易:-(尝试在所有平台和操作系统版本中模拟TableView节标题的本机UI听起来需要做很多工作。同样,重新实现ContextActions也需要做很多工作。我能想到的唯一其他棘手的工作就是创建自定义ListViewRenderer,并禁用/删除滚动。@EdwardBrey看一下James Montemagno It在一个页面上有多个
ListView
控件,但就像Adam所说的那样;它们不滚动,而且倾向于hacky。但是它工作正常,看起来很棒,我已经用过好几次了