1

Is it possible to apply ListViewBase.LoadMoreItemsAsync method for a pagination in a grouped ListView (CollectionViewSource). Or maybe you know another way, please let me know.

akrisanov
  • 3,212
  • 6
  • 33
  • 56

1 Answers1

0

You can do this like this: On your ListView add "Loaded" event with this code:

 private void LvPictures_OnLoaded(object sender, RoutedEventArgs e)
 {
     ScrollViewer viewer = GetScrollViewer(this.LvPictures);
     viewer.ViewChanged += LvPictures_ViewChanged;
 }


public static ScrollViewer GetScrollViewer(DependencyObject depObj)
      {
          if (depObj is ScrollViewer) return depObj as ScrollViewer;

          for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
          {
              var child = VisualTreeHelper.GetChild(depObj, i);

              var result = GetScrollViewer(child);
              if (result != null) return result;
          }
          return null;
      }

and now in ViewChangeEvent you can specify when you want to load more items and actually do this:

     private async void LvPictures_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
      {
          ScrollViewer view = (ScrollViewer)sender;
          double progress = view.VerticalOffset / view.ScrollableHeight;
          if (progress > 0.8 & !_incallFilesList && NextPagePicturesAvailable)
          {
              _incallFilesList = true;
              GetNextPicturesPageAsync();
          }
          _incallFilesList = false;
      }
Piachu
  • 195
  • 1
  • 13