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)
Источник данных связан с коллекцией 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;
}
1 ответ
ItemRealized имеет странное поведение, но на самом деле это работает. Он предварительно загружает кучу элементов перед прокруткой экрана, поэтому, если вы видите 10 элементов, предварительная загрузка ItemRealized 30 или 40 и остановка, пока вы не прокрутите, чтобы предварительно загрузить дополнительные элементы, прежде чем вы достигнете конца списка. Если вы протестируете это с 100 элементами, вы можете увидеть это поведение.