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

Xaml 如何在Xamarin窗体中检测滚动视图中的网格底部,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我正在使用Xamarin.Forms在网格(在滚动视图中)中显示来自Websource的项 当用户到达网格底部时,我希望加载更多项目并将其添加到网格中。我知道通常情况下,ListView更适合以这种方式显示数据(并且ListView有一个ItemExaming事件),但遗憾的是,我不得不使用网格 如果有帮助的话,我可以发布一些代码,但我不确定这里是否有必要 提前谢谢 编辑:这是我非常无聊的布局文件: <?xml version="1.0" encoding="utf-8" ?> &l

我正在使用Xamarin.Forms在网格(在滚动视图中)中显示来自Websource的项

当用户到达网格底部时,我希望加载更多项目并将其添加到网格中。我知道通常情况下,ListView更适合以这种方式显示数据(并且ListView有一个ItemExaming事件),但遗憾的是,我不得不使用网格


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

提前谢谢 编辑:这是我非常无聊的布局文件:

<?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>


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

当您有项目列表时,您应该使用
列表视图来显示它。在此列表视图的
DataTemplate
中,您可以指定如何显示每个项目(如果确实需要网格,请使用网格)

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

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

为什么要使用Listview?查看。

当您有一个项目列表时,您应该使用
列表视图来显示它。在此列表视图的
DataTemplate
中,您可以指定如何显示每个项目(如果确实需要网格,请使用网格)

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

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

为什么要使用Listview?请看。

因为我的原始问题(如何检测滚动视图的底部)没有得到令人满意的答案,而且我在网上其他地方也没有找到解决方案,所以我将发布我是如何解决这个问题的

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

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

myScrollView.Scrolled += (sender, e) => { onScrolled(); };
在我的onScrold中,我有以下if子句来确定我是否已到达ScrollView的底部:

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

由于我没有得到一个满意的答案,我原来的问题(如何检测点击底部的滚动视图),我也没有找到一个解决方案在网上任何地方,我将张贴我如何解决这个问题

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

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

myScrollView.Scrolled += (sender, e) => { onScrolled(); };
在我的onScrold中,我有以下if子句来确定我是否已到达ScrollView的底部:

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

“如果有帮助,我可以发布一些代码,但我不确定是否有必要在这里发布这些代码。”如果有帮助,我可以发布一些代码,但我不确定是否有必要在这里发布这些代码。“如果有帮助,我可以发布一些代码,但我不确定这是否有必要。”如果可以的话,这是最好的。@Ian你到底在找什么?我的问题是每行显示多个项目,但行数也是动态的(取决于屏幕大小/方向),我可以用网格很容易地做到这一点,所以我想继续。你是在告诉我用网格做这件事是不可能的吗?当你有一个动态的项目源时,你应该使用listview(我在我的答案中放了一个链接)。作为一个workrund:您可以实现一个包含(例如)3项的模型。在Listview中,您可以为每个模型实现一个网格,并显示这3个项目。我的问题是每行显示多个项目,但也有动态行数(取决于屏幕大小/方向),我可以很容易地使用网格来实现这一点,所以我想继续。你是在告诉我用网格做这件事是不可能的吗?当你有一个动态的项目源时,你应该使用listview(我在我的答案中放了一个链接)。作为一个workrund:您可以实现一个包含(例如)3项的模型。在Listview中,您可以为每个模型实现一个网格,并显示这3项。