将ListView的HeightRequest设置为所有Item的RowHeight的总和

时间:2018-03-22 15:39:57

标签: c# listview xamarin.forms

ListView的固有行为是它始终以固定高度渲染,而不管它显示的项目如何。如果有更多项目,ListView将自动显示滚动条。现在我将ListView放在ScrollViewer中。由于ListView位于ScrollViewer中,因此ListView的滚动条功能不起作用(它甚至不会显示),因此我无法查看Listview中的所有项目。所以我想要的是ListView高度应该是这样,它显示所有项目没有任何滚动条。我在这个问题上的搜索表明问题是已知问题,没有任何适当的修复。我根据不同帖子的建议尝试了各种解决方法,但是它会在运行时创建一个或另一个问题。

解决此问题的唯一方法似乎是在加载列表时动态地将项的行高加起来,并将所有项的Rowheight的总和设置为ListView的HeightRequest。所以任何人都可以建议正确的方法来计算每个项目的RowHeight。请注意,我有不均匀的行,即每个项目的行高可能不同。

期待帮助指针/代码片段。

由于

1 个答案:

答案 0 :(得分:2)

我认为您无法动态获取项目的行高。但是,您可以在视图模型中定义height属性(例如,在此代码示例中为ItemHeight)并绑定HeightRequest中每个单元格的ListView属性。然后,您可以简单地遍历ListView的项目来源并获得高度的总和。

XAML listview:

<ListView HasUnevenRows="true">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <AbsoluteLayout HeightRequest="{Binding ItemHeight}">
                    ...
                </AbsoluteLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

C#视图模型:

public class ItemViewModel
{
    ...
    public double ItemHeight { get; set; } = 50;
}

根据您在ItemHeight中显示的内容,您可以为ListView为不同的项目分配不同的值。