如何从 Syncfusion 列表视图中获取可见项目?
How to get visible items from Syncfusion list view?
我在 Xamarin.Forms 项目中工作,并使用 Syncfusion SfListView 控件创建列表。
现在我只想在初始基础上和滚动列表视图后获得可见项目。意味着在滚动停止后我需要通过 API.
获取更新来更新可见项目
如何在 Xamarin.Forms Syncfusion SfListView 中实现此目的?
谁能给出解决方案吗?
谢谢。
SfListView
允许在使用 Changed
事件滚动时发出通知。通过使用该事件,您可以根据LastBodyVisibleLineIndex
属性 和基础集合计数来判断SfListView 中是否到达列表中的最后一项。
您可以使用下面的代码。
using Syncfusion.ListView.XForms.Control.Helpers;
public partial class MainPage : ContentPage
{
VisualContainer visualContainer;
bool isAlertShown = false;
public MainPage()
{
InitializeComponent();
visualContainer = listView.GetVisualContainer();
visualContainer.ScrollRows.Changed += ScrollRows_Changed;
}
///<summary>
///To notify when end reached
///</summary>
private void ScrollRows_Changed(object sender, ScrollChangedEventArgs e)
{
var lastIndex = visualContainer.ScrollRows.LastBodyVisibleLineIndex;
//To include header if used
var header = (listView.HeaderTemplate != null && !listView.IsStickyHeader) ? 1 : 0;
//To include footer if used
var footer = (listView.FooterTemplate != null && !listView.IsStickyFooter) ? 1 : 0;
var totalItems = listView.DataSource.DisplayItems.Count + header + footer;
if ((lastIndex == totalItems - 1))
{
if (!isAlertShown)
{
// do something to update the visible items by getting updates through API.
DisplayAlert("Alert", "End of list reached...", "Ok");
isAlertShown = true;
}
}
else
isAlertShown = false;
}
}
我们想通知您,您可以从 VisualContainer 的子 属性 获取加载时创建的项目。此外,您可以使用 VisualContainer.ScrollRows.LastBodyVisibleLineIndex 属性.
获取最后一个可见项目的信息
VisualContainer.Children 将包含可见项目的详细信息。
public class Behavior : Behavior<ContentPage>
{
SfListView ListView;
VisualContainer VisualContainer;
protected override void OnAttachedTo(ContentPage bindable)
{
ListView = bindable.FindByName<SfListView>("listView");
VisualContainer = ListView.GetVisualContainer();
ListView.ScrollStateChanged += ListView_ScrollStateChanged;
base.OnAttachedTo(bindable);
}
private void ScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
}
private void ListView_ScrollStateChanged(object sender, ScrollStateChangedEventArgs e)
{
if (e.ScrollState == ScrollState.Idle)
{
var visibleItems = VisualContainer.Children;
var lastVisibleItem = VisualContainer.ScrollRows.LastBodyVisibleLineIndex;
}
}
}
我在 Xamarin.Forms 项目中工作,并使用 Syncfusion SfListView 控件创建列表。
现在我只想在初始基础上和滚动列表视图后获得可见项目。意味着在滚动停止后我需要通过 API.
获取更新来更新可见项目如何在 Xamarin.Forms Syncfusion SfListView 中实现此目的?
谁能给出解决方案吗?
谢谢。
SfListView
允许在使用 Changed
事件滚动时发出通知。通过使用该事件,您可以根据LastBodyVisibleLineIndex
属性 和基础集合计数来判断SfListView 中是否到达列表中的最后一项。
您可以使用下面的代码。
using Syncfusion.ListView.XForms.Control.Helpers;
public partial class MainPage : ContentPage
{
VisualContainer visualContainer;
bool isAlertShown = false;
public MainPage()
{
InitializeComponent();
visualContainer = listView.GetVisualContainer();
visualContainer.ScrollRows.Changed += ScrollRows_Changed;
}
///<summary>
///To notify when end reached
///</summary>
private void ScrollRows_Changed(object sender, ScrollChangedEventArgs e)
{
var lastIndex = visualContainer.ScrollRows.LastBodyVisibleLineIndex;
//To include header if used
var header = (listView.HeaderTemplate != null && !listView.IsStickyHeader) ? 1 : 0;
//To include footer if used
var footer = (listView.FooterTemplate != null && !listView.IsStickyFooter) ? 1 : 0;
var totalItems = listView.DataSource.DisplayItems.Count + header + footer;
if ((lastIndex == totalItems - 1))
{
if (!isAlertShown)
{
// do something to update the visible items by getting updates through API.
DisplayAlert("Alert", "End of list reached...", "Ok");
isAlertShown = true;
}
}
else
isAlertShown = false;
}
}
我们想通知您,您可以从 VisualContainer 的子 属性 获取加载时创建的项目。此外,您可以使用 VisualContainer.ScrollRows.LastBodyVisibleLineIndex 属性.
获取最后一个可见项目的信息VisualContainer.Children 将包含可见项目的详细信息。
public class Behavior : Behavior<ContentPage>
{
SfListView ListView;
VisualContainer VisualContainer;
protected override void OnAttachedTo(ContentPage bindable)
{
ListView = bindable.FindByName<SfListView>("listView");
VisualContainer = ListView.GetVisualContainer();
ListView.ScrollStateChanged += ListView_ScrollStateChanged;
base.OnAttachedTo(bindable);
}
private void ScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
}
private void ListView_ScrollStateChanged(object sender, ScrollStateChangedEventArgs e)
{
if (e.ScrollState == ScrollState.Idle)
{
var visibleItems = VisualContainer.Children;
var lastVisibleItem = VisualContainer.ScrollRows.LastBodyVisibleLineIndex;
}
}
}