如何检测在Xamarin Forms中滚动视图中的网格底部

时间:2016-01-28 10:01:04

标签: xaml xamarin xamarin.forms

我正在使用Xamarin.Forms来显示网格中的Websource(在ScrollView中)中的项目。

当用户点击网格底部时,我想加载更多项目并将它们添加到网格中。我知道通常ListView是以这种方式显示数据的首选(并且ListView有一个ItemAppearing事件)但遗憾的是我必须使用网格。

如果有帮助,我可以发布一些代码,但我不确定这是否有必要。

提前致谢 编辑:这是我真正无聊的布局文件:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProject.MyNamespace.LayoutName"
             SizeChanged="OnPageSizeChanged">
  <ScrollView >
    <AbsoluteLayout x:Name="myLayout">
      <Grid x:Name="GridForItems" RowSpacing="6" ColumnSpacing="6">
      </Grid>
    </AbsoluteLayout>
  </ScrollView>
</ContentPage>

我以编程方式添加所有行,列和项目。

2 个答案:

答案 0 :(得分:3)

由于我没有得到令人满意的答案我的原始问题(如何检测到击中 scrollview 的底部),我还没有在网上的任何其他地方找到解决方案我将要发布我怎么解决这个问题。

请注意,这可能不是一个优雅的解决方案,如果你有更好的答案,请发布它,我会接受它作为最佳答案。

我所做的是为ScrollView的滚动事件实现一个委托。

 private void onScrolled()
 {
    if(myScrollView.ScrollY >= myScrollView.ContentSize.Height - myScrollView.Height)
    {
      //Handle hitting the bottom
    }
 }

在我的onScrolled中,我有以下if子句来确定我是否已经触及ScrollView的底部:

{{1}}

答案 1 :(得分:0)

如果您有项目列表,则应使用ListView进行显示。在此ListView的DataTemplate中,您可以指定如何显示每个项目(如果您确实需要网格,请使用网格)。

在Listview中,您可以实现以下代码来检测底部:

myListview.ItemAppearing += (sender, e) =>
{
    // CHECK HERE
    if(e.Item.Id == MyItems[MyItems.Count - 1].Id)
    {
        // YOU HIT THE BOTTOM
    } 
}

我为什么要使用Listview?请看this forum thread about Dynamic Grids