如何从Observable Collection中获得10个,10个项目?

时间:2014-06-23 12:45:50

标签: c# windows-phone-7 observablecollection

我试图在Windows Phone 7列表框中每页加载十个项目。当我滚动到列表框的末尾时,应该加载另外10个项目。我尝试过一个简单的刺痛。我已经做到了。当我尝试加载我原来的可观察集合时,我无法获得10,10项。

我试过这样的: -

    void AddMoreItems()
    {
        int start = items.Count;
        int end = start + 10;
        for (int i = start; i < end; i++)
        {
            items.Add("Item " + i);
        }
    }

在这里,我每页可以加载10个,10个项目。

现在我尝试使用可观察的集合: -

int end = 10;
int start = 0;
int total = listForLoading.Count;

void AddMoreItems()
{
    if (total > 0)
    {
        int i = start;
        foreach (var item in StudentDetails)
        {
            if (i < end)
            {
                items.Add(new ListBoxWithButtonModel() { FirstName = item.FirstName,LastName = item.LastName,Age = item.Age,PersonImage=item.PersonImage });                       
                i++;
            }
        }
        total = total > 10 ? total - 10 : total - total;
        start = items.Count;
        end = total > 10 ? start + 10 : start + total;
    }
}

我在这里一次又一次地获得相同的物品。我想在添加到列表框后从集合中删除项目。但我收到了错误。

请让我知道从可观察的集合中加载10个,10个项目。

1 个答案:

答案 0 :(得分:3)

问题是foreach始终从列表的开头开始,但您不会在列表的开头启动计数器。您可以使用以下方法简化代码:

int taken = 0;  // number of items already taken
int totalToTake = listForLoading.Count;

void AddMoreItems()
{
    if (taken >= totalToTake) return;  // all taken

    int i = 0;
    int stopi = taken+10;
    foreach (var item in StudentDetails)
    {
        if (i >= taken && i < stopi)
        {
            // add your item here

            // and then increment the number taken
            taken++;
        }
        ++i;
    }
 }

您可以使用以下方式简化以下操作:

    var itemsToTake = StudentDetails.Skip(taken).Take(10);
    foreach (var item in itemsToTake)
    {
        // add your item here

        // and then increment the number taken
        taken++;
    }