Xamarin.forms 如何检测xamarin表单中的列表视图滚动方向

Xamarin.forms 如何检测xamarin表单中的列表视图滚动方向,xamarin.forms,Xamarin.forms,我试图检测列表视图的滚动方向。我的要求是在列表视图上下滚动时需要实现不同的功能。请提出检测列表视图滚动方向的任何想法。我在列表视图中尝试了以下语法 示例代码: 我认为默认情况下您无法执行此操作,您只能对出现或消失的项目执行操作。因此,您需要创建一些代码来获取(dis)显示项的索引,并查看索引是变高还是变低,以确定某人是在向上还是向下滚动。或者您需要连接一个自定义渲染器,但我也不确定本机控件是否有任何东西可以检测到这一点 我给你举了一个非常基本的例子,你可以找到 基本上,钩住可用的事件,跟踪类变量

我试图检测列表视图的滚动方向。我的要求是在列表视图上下滚动时需要实现不同的功能。请提出检测列表视图滚动方向的任何想法。我在列表视图中尝试了以下语法

示例代码:
我认为默认情况下您无法执行此操作,您只能对出现或消失的项目执行操作。因此,您需要创建一些代码来获取(dis)显示项的索引,并查看索引是变高还是变低,以确定某人是在向上还是向下滚动。或者您需要连接一个自定义渲染器,但我也不确定本机控件是否有任何东西可以检测到这一点

我给你举了一个非常基本的例子,你可以找到

基本上,钩住可用的事件,跟踪类变量中的最后一个索引,并将其与出现的项的当前索引进行比较

private void Handle_ItemAppearing (object sender, Xamarin.Forms.ItemVisibilityEventArgs e)
{
    var currentIdx = Items.IndexOf ((string)e.Item);

    if (currentIdx > _lastItemAppearedIdx)
        Direction.Text = "Up";
    else
        Direction.Text = "Down";

    _lastItemAppearedIdx = Items.IndexOf ((string)e.Item);
}
在这段代码中,我只是将其显示在一个
标签中
,但当然,您可以创建一些枚举来返回或触发一个事件或其他东西,以使代码更加可重用。以下是正在运行的代码:


最近遇到了此问题,并通过以下方式解决了此问题:

<StackLayout>
<Label x:Name="Direction" />
<ListView ItemsSource="{Binding Items}" HasUnevenRows = "true" ItemAppearing="Handle_ItemAppearing" ItemDisappearing="Handle_ItemDisappearing" IsPullToRefreshEnabled = "true">
<ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                <Label Text = "{Binding}" />
                </StackLayout>
            </ViewCell>
        </DataTemplate>
</ListView.ItemTemplate>
    </ListView>

嗨,杰拉尔德·维斯路易斯,谢谢你的回复。您建议了ItemExaming事件,但我尝试了该事件,它仅在列表中加载数据时命中,然后在我们尝试滚动内容时,它不再命中。很抱歉,您做错了什么,每次出现项目时都会命中此事件,请运行附带的GitHub示例,它是有效的。我的要求是在列表视图中加载数据后,当用户尝试滚动数据时,需要检测他是否在向上或向下滚动。对不起,Gerald,我已经运行了该示例代码,它工作得很好,但我不知道为什么列表视图不触发itemseapping事件。但它现在有效吗?我不太明白你最后的评论。
<StackLayout>
<Label x:Name="Direction" />
<ListView ItemsSource="{Binding Items}" HasUnevenRows = "true" ItemAppearing="Handle_ItemAppearing" ItemDisappearing="Handle_ItemDisappearing" IsPullToRefreshEnabled = "true">
<ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <StackLayout>
                <Label Text = "{Binding}" />
                </StackLayout>
            </ViewCell>
        </DataTemplate>
</ListView.ItemTemplate>
    </ListView>
    string ScrollingDirection;
    int visibleTabIndex;
    int disappearingTabIndex;

    public async void Handle_ItemAppearing(object sender, ItemVisibilityEventArgs e)
    {
        var visibleTab = e.Item;
        visibleTabIndex = MyItemsList.IndexOf(visibleTab);
        if (disappearingTabIndex > visibleTabIndex) ScrollingDirection = "DOWN";
        else ScrollingDirection = "UP";

    }

    public async void Handle_ItemDisappearing(object sender, ItemVisibilityEventArgs e)
    {
        var invisibleTab = e.Item as TicketsList;
        disappearingTabIndex = tvm.Tickets.IndexOf(invisibleTab);


    }