如何通过拉下物品来刷新?

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

这个解决方案

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(已标记)的post,也适用于Windows Phone 8

http://sharpgis.net/post/2011/04/03/RefreshBox-for-Windows-Phone-7.aspx http://blogs.msdn.com/b/jasongin/archive/2011/04/13/pull -down到刷新-A-WP7,列表框或- scrollviewer.aspx

两者都要陈述

 ScrollViewer.ManipulationMode ="Control" 

你不能依赖于被解雇的ItemRealized 。 您需要在LongListSelector上的ManipulationDelta事件上添加一个侦听LongListSelector 。 如果增量为负,则用户向上滚动。

编辑

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

解决方法是将LLS放在ScrollViewer 。 然后将LLSHeight属性设置为Auto 。 这样ScrollViewer而不是LLS 。 然后在ScrollViewer's VerticalOffset上添加一个监听器。

 private double _scrollingFrom; ScrollViewer.Loaded += (sender, args) => VisualStateHelper.HookEvent(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