1

動的ロードでスクロール可能な無限リストを実装しようとしています。( 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;            
    }      
4

1 に答える 1

1

ItemRealized は異常な動作をしますが、実際には動作します。画面スクロールの前に一連の要素をプリロードするため、10 個の要素が表示されている場合、ItemRealized は 30 または 40 をプリロードし、スクロールしてリストの最後に到達する前にさらに項目をプリロードするまで停止します。100 個の要素でテストすると、この動作が見られます。

于 2013-08-21T08:31:39.003 に答える