有很多答案,但是,正如我所看到的,所有这些都是关于在底部获取旧项目。
此解决方案:
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
中。然后将LLS
的Height
属性设置为"自动"。这样滚动的是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