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