如何通过下拉项目进行刷新


这个问题

有很多答案,但是,正如我所看到的,所有这些都是关于在底部获取旧项目。

此解决方案:

void resultList_ItemRealized(object sender, ItemRealizationEventArgs e)
{
    if (!_viewModel.IsLoading && resultList.ItemsSource != null && resultList.ItemsSource.Count >= _offsetKnob)
    {
        if (e.ItemKind == LongListSelectorItemKind.Item)
        {
            if ((e.Container.Content as TwitterSearchResult).Equals(resultList.ItemsSource[resultList.ItemsSource.Count - _offsetKnob]))
            {
                _viewModel.LoadPage(_searchTerm, _pageNumber++);
            }
        }
    }
}

是关于在向下滚动时获取项目。

如何在顶部获取新的新内容(而不是底部的更多旧内容)? 我如何知道用户是否正在向上滚动LongListSelector

这里有两篇文章,用于为 Windows Phone 7 中的 ListBox(您已标记)完成此操作,并且也适用于 Windows Phone 8

http://sharpgis.net/post/2011/04/03/RefreshBox-for-Windows-Phone-7.aspxhttp://blogs.msdn.com/b/jasongin/archive/2011/04/13/pull-down-to-refresh-a-wp7-listbox-or-scrollviewer.aspx

要设置的两个状态

ScrollViewer.ManipulationMode ="Control"

你不能指望ItemRealized被解雇。您需要在 LongListSelector 上的 ManipulationDelta 事件上添加侦听器。如果增量为负数,则用户向上滚动。

编辑

我只记得Microsoft对Windows Phone 8 LongListSelector (LLS)进行了一些更改,这意味着无法获得列表滚动的方向。

解决方法是将LLS放在ScrollViewer中。然后将LLSHeight属性设置为"自动"。这样滚动的是ScrollViewer而不是LLS。然后在ScrollViewer's VerticalOffset上添加一个侦听器。

private double _scrollingFrom;
ScrollViewer.Loaded += (sender, args) => VisualStateHelper.HookEvent<ScrollViewer>(ScrollViewer, "ScrollStates", scrollHandler);
private void scrollHandler(object sender, VisualStateChangedEventArgs e) {
    if (e.NewState.Name.Equals("NotScrolling")) {
        if (ScrollViewer.VerticalOffset < _scrollingFrom) {
            // Scrolled up
        } else {
            // Scrolled down
        }
    } else {
        _scrollingFrom = ScrollViewer.VerticalOffset;
    }
}

请参阅此处的 VisualStateHelper

最新更新