|
public class Behavior : Behavior<ContentPage>
{
SfListView ListView;
VisualContainer Container;
ContactsViewModel ViewModel;
protected override void OnAttachedTo(ContentPage bindable)
{
ListView = bindable.FindByName<SfListView>("listView");
ListView.ItemAppearing += ListView_ItemAppearing;
ViewModel = bindable.BindingContext as ContactsViewModel;
Container = ListView.GetVisualContainer();
base.OnAttachedTo(bindable);
}
private void ListView_ItemAppearing(object sender, ItemAppearingEventArgs e)
{
var index = Container.ScrollRows.LastBodyVisibleLineIndex;
var item = ListView.DataSource.DisplayItems[index - 1] as Contacts;
ViewModel.VisibleItem = item.ContactName;
}
} |
|
private void PanGestureRecognizer_PanUpdated(object sender, PanUpdatedEventArgs e)
{
if(e.StatusType == GestureStatus.Completed)
{
int idx;
if((this.BindingContext as ContactsViewModel).Direction == 0)
{
idx = (this.BindingContext as ContactsViewModel).Index--;
if(idx > 0)
{
listView.LayoutManager.ScrollToRowIndex(--idx);
}
}
else
{
idx = (this.BindingContext as ContactsViewModel).Index++;
if (idx < listView.DataSource.DisplayItems.Count-1)
{
listView.LayoutManager.ScrollToRowIndex(++idx);
}
}
}
if (e.StatusType == GestureStatus.Running)
{
if(e.TotalY > 0)
{
(this.BindingContext as ContactsViewModel).Direction = 0; // Backward direction
}
else if(e.TotalY < 0)
{
(this.BindingContext as ContactsViewModel).Direction = 1; //Forward direction
}
}
} |