LongListSelector WP8 ItemRealized — бесконечный прокручиваемый список —

Я пытаюсь реализовать бесконечный прокручиваемый список с динамической загрузкой. (например, http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/10/01/how-to-create-an-infinite-scrollable-list-with-longlistselector.aspx )

  • DataSource привязан к ObservableCollection

  • Наполнение списка начинается с добавления предметов в коллекцию

  • ItemRealizedEvent запускает дальнейшее заполнение ObservableCollection.

Я думал, что ItemrealizedEvent запускается при прокрутке, НО он всегда запускается после добавления элементов в коллекцию для каждого элемента.

--> Так что он не динамический, он просто загружает все

Любые идеи?

Внутри PageClass:

within the Constructor:
(...)
LLS_BooksListAll.DataContext = _viewModel.SearchAllViewModel;
LLS_BooksListAll.ItemsSource = _viewModel.SearchAllViewModel.MediumCollection;
(...)

private async void LLS_BooksListAll_ItemRealized(object sender, ItemRealizationEventArgs e)
{
    if ((LLS_BooksListAll.ItemsSource as ObservableCollection<Medium>) == null) return;

    //get number of loaded items
    int currentItemsCount = (LLS_BooksListAll.ItemsSource as ObservableCollection<Medium>).Count;

    if (!_viewModel.SearchAllViewModel.IsLoading && currentItemsCount >= _offsetKnob &&
        (e.Container.Content as Medium) != null)
    {
        if ((e.Container.Content as Medium).Equals((LLS_BooksListAll.ItemsSource as
            ObservableCollection<Medium>)[currentItemsCount - _offsetKnob]))
        {
            _pageNumberAll++;
            try
            {
                await _viewModel.SearchAllViewModel.SearchAll(TB_Search.Text, _pageNumberAll);
            }
            catch (RestException ex)
            {
                MessageBox.Show("Connection-Error:  LLS_BooksListAll_ItemRealized - " + ex.Message);
            }
        }
    }
}

В ViewModelClass:

    public async void SearchAll(string searchword, int pageNumber)
    {
        if (pageNumber == 1) this.MediumCollection.Clear();
        IsLoading = true;
        SearchRequest search = new SearchRequest();
        String responseString = await search.Get(searchword, SearchRange.all, pageNumber);
        MediaUser response = JsonConvert.DeserializeObject<MediaUser>(responseString);
        foreach (Medium med in response.media)
        {
            MediumCollection.Add(med); //Filling the observable collection
        }
        IsLoading = false;            
    }      

person IntegerWolf    schedule 21.08.2013    source источник


Ответы (1)


ItemRealized имеет экстравагантное поведение, но на самом деле это работает. Он предварительно загружает кучу элементов перед прокруткой экрана, поэтому, если вы видите 10 элементов, ItemRealized предварительно загружает 30 или 40 и останавливается, пока вы не прокрутите, чтобы предварительно загрузить больше элементов, прежде чем вы достигнете конца списка. Если вы протестируете его со 100 элементами, вы увидите такое поведение.

person Josue Yeray    schedule 21.08.2013
comment
У меня именно такая ситуация, описанная в вопросе, но когда я ищу Smith, который, как это бывает, дает результат, ограниченный 100 элементами в кусках по 10, itemrealized продолжает срабатывать и загружаются все 100. - person Peter Wone; 13.02.2014