【问题标题】:How to get visible items from Syncfusion list view?如何从 Syncfusion 列表视图中获取可见项目?
【发布时间】:2021-02-16 19:36:30
【问题描述】:

我在 Xamarin.Forms 项目中工作并使用 Syncfusion SfListView 控件作为列表。

现在我只想在初始基础上和滚动列表视图后获取可见项目。意味着滚动停止后,我需要通过 API 获取更新来更新可见项目。

如何在 Xamarin.Forms Syncfusion SfListView 中实现这一点?

谁能给出解决方案?

谢谢。

【问题讨论】:

    标签: listview xamarin xamarin.forms syncfusion


    【解决方案1】:

    我们想通知您,您可以从 VisualContainer 的 Children 属性获取加载时创建的项目。此外,您可以使用 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; 
                } 
            } 
        } 
    

    【讨论】:

      【解决方案2】:

      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;
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多