Как определить направление прокрутки в виде списка в формах xamarin
Я попытался определить направление прокрутки списка. Мое требование заключается в необходимости реализации различных функций при прокрутке списка вверх и вниз. Пожалуйста, предложите любую идею для определения направления прокрутки списка. Я попробовал ниже синтаксис в моем представлении списка.
Образец кода:
<StackLayout>
<Label x:Name="Direction" />
<ListView ItemsSource="{Binding Items}" HasUnevenRows = "true" ItemAppearing="Handle_ItemAppearing" IsPullToRefreshEnabled = "true">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text = "{Binding}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
1 ответ
Я не думаю, что вы можете сделать это по умолчанию, вы можете действовать только на элемент, который появляется или исчезает. Итак, вам нужно либо поработать с этим, создав некоторый код, который получает индекс (не) появляющихся элементов, и посмотреть, становятся ли индексы выше или ниже, чтобы определить, прокручивается ли кто-то вверх или вниз. Или вам нужно подключить пользовательский рендерер, но я не уверен, что в нативных элементах управления есть что-то, чтобы это обнаружить.
Я привел очень простой пример для вас, вы можете найти полный код здесь.
По сути, подключитесь к доступному событию, отследите последний индекс в переменной класса и сравните его с текущим индексом отображаемого элемента.
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);
}
В этом коде я просто показываю это в Label
, но, конечно, вы можете создать некоторое перечисление для возврата или запуска события или что-то еще, чтобы сделать код более пригодным для повторного использования. Вот код в действии:
Этот подход немного отличается, основанный на этом посте, для обработки появления и исчезновения.
Xamarin.Forms ListView Прокрутка вверх / вниз Обнаружение
https://ianvink.wordpress.com/2019/03/06/xamarin-forms-listview-scrolling-up-down-detection
Недавно столкнулся с этой проблемой и исправил ее следующим образом:
<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);
}