Xamarin在TableView中表单ListView

时间:2017-04-03 22:12:19

标签: listview xamarin.forms tableview

我正在尝试构建一个包含几个部分的页面,其中两个部分包含可从ListView context actions中受益的短列表。使用包含ListViews的TableView似乎非常合适。但是,它似乎无法发挥作用。

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

2 个答案:

答案 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>

示例摘自:Xamarin Forms ListView Grouping

答案 1 :(得分:0)

如果您指定固定的ListView.RowHeight并且不使用页眉或页脚,则会发现ListView将在另一个ScrollView中运行(例如包含在TableView中)。用户体验并不完美:如果ListView收到滚动手势但外部视图不需要滚动,则ListView会向用户提供可以滚动的错误反馈。例如,您可以在Xamarin Evolve应用中看到这一点。

ListView适用于这种情况,因为它可以快速计算其高度。如果行高度不一致且事先已知,则ListView会告诉其容器它与页面一样高,外部ScrollView采用面值。

这种限制往往不是太糟糕。如果您没有固定高度的行,那么上下文操作可能并不总是看起来很好,并且不同的设计方法(例如将命令放在详细信息页面上)可能是更好的选择。

另一个问题是你在iOS上的TableView中can't put variable-sized cells,除非你愿意自己测量身高。另一种分组方法是使用Frames。