【问题标题】:Infinite Scrolling in a ListViewListView 中的无限滚动
【发布时间】:2015-02-27 15:53:58
【问题描述】:

我正在尝试在我的列表视图中实现无限滚动。

方法是在列表视图中获取滚动条并将事件处理程序挂钩到它的滚动事件。

<CollectionViewSource x:Key="PaginatedData"
                      IsSourceGrouped="True"
                      ItemsPath="CommentaryList"
                      Source="{Binding paginatedCommentary}"/>

 <ListView x:Name="commentaryListView"
           Loaded="commentaryListView_Loaded"
           ItemTemplate="{StaticResource CommentaryListTemplate}"
           ItemsSource="{Binding Source={StaticResource PaginatedData}}"/>
private void commentaryListView_Loaded(object sender, RoutedEventArgs e)
{
    var scrollViewer = commentaryListView.GetFirstDescendantOfType<ScrollViewer>();
    var scrollbars = new List<ScrollBar>(scrollViewer.GetDescendantsOfType<ScrollBar>());
    var verticalBar = scrollbars.FirstOrDefault(x => x.Orientation == Orientation.Vertical);
    if (verticalBar != null)
       verticalBar.Scroll += BarScroll; 

}

private void BarScroll(object sender, ScrollEventArgs e)
{
   if (e.ScrollEventType != ScrollEventType.EndScroll) return;

   var bar = sender as ScrollBar;
   if (bar == null) return;

   if (e.NewValue >= bar.Maximum)
   {
       datacontext.pageCommentaryItems();
   }
}

似乎无法弄清楚我在这里做什么,但它从未触及 BarScroll 事件处理程序。

感谢您的帮助。谢谢你:)

【问题讨论】:

    标签: windows-phone-8.1 winrt-xaml


    【解决方案1】:

    我建议你直接使用 ListView 的 ViewChanged 事件:

        private void OnListViewLoaded(object sender, RoutedEventArgs e)
        {
            var listview = sender as ListViewBase;
            if (listview != null)
            {
                  // Attach to the view changed event
                _scrollViewer = listview.GetFirstDescendantOfType<ScrollViewer>();
                if (_scrollViewer != null)
                {
                    _scrollViewer.ViewChanged += OnViewChanged;
                }
            }
        }
    
        private void OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
        {
            // If scrollviewer is scrolled down at least 90%
            if (_scrollViewer.VerticalOffset > Math.Max(_scrollViewer.ScrollableHeight * 0.9, _scrollViewer.ScrollableHeight - 150))
            {
                // Execute whatever you want
            }
        }
    

    【讨论】:

      【解决方案2】:

      一个更简单的解决方案是创建一个实现 ISupportIncrementalLoading 接口的可观察集合并将其绑定到您的 ListView。这将使 ListView 进行增量滚动,而无需自己实现。见https://marcominerva.wordpress.com/2013/05/22/implementing-the-isupportincrementalloading-interface-in-a-window-store-app/

      【讨论】:

      • 这仅支持在底部添加项目时无限加载。如果我想从下到上无限加载怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2021-02-09
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多