2014-06-23 4 views
1

Я пытаюсь загрузить десять элементов на страницу в окне окна Windows 7. Когда я перейду до конца списка, нужно загрузить еще 10 элементов. Я попробую с простым укусом. Я сделал с этим. Когда я пытаюсь загрузить свою оригинальную наблюдаемую коллекцию, я не могу получить 10,10 предметов.Как получить десять, десять предметов из коллекции Observable?

меня попробовать, как это: -

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

Какую ошибку вы получаете? Вы изучали поэтапную загрузку? http://www.rahulpnath.com/blog/windows-phone-series-incremental-loading/ – FunksMaName

+0

Я получаю эту ошибку: 'InvalidOperationException'. Нет, я не пробовал это .. Я попробую эту ссылку также .. – Vijay

ответ

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++; 
    } 
+0

Wow .. !! Работает..!! Спасибо, сэр..!! – Vijay

Смежные вопросы