Windows Phone ListView无限滚动与skip()。take()方法?

时间:2015-07-23 07:00:38

标签: c# api listview windows-phone-8.1 hacker-news

我正在尝试将TopStories从hackernews API变成ListView。我想要无限滚动,所以我使用的是ISupportIncrementalLoading接口。下面是LoadMoreItemsAsync方法中的代码。

var httpClient = new HttpClient();
var response = await httpClient.GetAsync(new Uri("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty"));
var json = await response.Content.ReadAsStringAsync();
List<string> topStoriesID = JsonConvert.DeserializeObject<List<string>>(json);
ObservableCollection<RootObject> ro = new ObservableCollection<RootObject>();

do
{
    var firstFewItems = (from topItemsID in topStoriesID
                         select topItemsID).Skip(lastItem).Take((int)count);
    foreach (var element in firstFewItems)
    {
        var itemResponse = await httpClient.GetAsync(new Uri("https://hacker-news.firebaseio.com/v0/item/" + element + ".json?print=pretty"));
        itemJson = await itemResponse.Content.ReadAsStringAsync();
        ro.Add(JsonConvert.DeserializeObject<RootObject>(itemJson));
        lastItem = (int)count;
        count = count + count;
    }

 } while (lastItem != 500);

await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal,
    () =>
    {
        foreach (var item in ro)
        {
            this.Add(item);
        }
     });
return new LoadMoreItemsResult() { Count = count };

运行代码会给我一个没有错误的空白页面。该URL返回500个项目,所以我在这里做的是首先我在topStoriesID列表中存储500个项目ID。

然后我通过使用Skip()。Take()方法然后在这些ID上运行foreach循环来获取实际故事并将它们添加到ObservableCollection对象ro中。我一直这样做,直到lastItem达到500。

那么这段代码是否正确或是否有更好的方法来实现它?

感谢。

0 个答案:

没有答案