Je travaille dans le projet Xamarin.Forms et j'utilise le contrôle Syncfusion SfListView pour une liste.

Maintenant, je veux obtenir des éléments visibles uniquement sur la base initiale et après avoir fait défiler la liste. Cela signifie qu'après l'arrêt du défilement, j'ai besoin que les éléments visibles soient mis à jour en obtenant des mises à jour via l'API.

Comment puis-je y parvenir dans Xamarin.Forms Syncfusion SfListView?

Quelqu'un pourrait-il s'il vous plaît donner la solution pour cela?

Merci.

0
Sulay Joshi 4 nov. 2020 à 07:59

2 réponses

Meilleure réponse
We have checked the reported query “How to get visible items from Syncfusion list view?” from our side. We would like to inform you that you can get the items created on load from the Children property of the VisualContainer. Also, you can get the information of the last visible item using the VisualContainer.ScrollRows.LastBodyVisibleLineIndex property. Please find the code snippets from the below, 
C#: The VisualContainer.Children will have the details of the visible items.
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; 
            } 
        } 
    } 
1
SaiGanesh Sakthivel 12 nov. 2020 à 11:03

Le SfListView permet de notifier lors du défilement à l'aide de l'événement Changed. En utilisant cet événement, vous pouvez déterminer si le dernier élément de la liste a été atteint dans SfListView en fonction de la propriété LastBodyVisibleLineIndex et du nombre de collections sous-jacentes.

Vous pouvez utiliser le code ci-dessous.

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;
 }
}
0
Wendy Zang - MSFT 4 nov. 2020 à 05:59