我试图在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个项目。
答案 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++;
}