6

LongListSelector が一番下までスクロールされたときに、Web サービスからさらに多くのデータを自動的にロードしたいと考えています。ストア アプリと同じように。私の問題は、さらに読み込みアクションをトリガーするイベントが見つからないことです。

4

1 に答える 1

13

Microsoftからの推奨事項は、LongListSelector.ItemRealizedイベントを使用して、それが「実現」されるリストの最後のアイテム(または最後からN番目のアイテム)であるかどうかを確認し、そうである場合は、新しいレコードのフェッチを開始することです。UXに関しては、その時点でSystemTrayにProgressIndicatorを表示し、インラインスピナーでiOSを模倣しようとしないことをお勧めします。

LongListSelector.ItemRealizedは、アイテムが仮想化されたListBoxItemにデータバインドされたときに発生するため、実際には非常に興味深いイベントです。つまり、LongListSelector仮想化ロジックは、画面に表示されるFrameworkElementを準備する必要があると考えています。ListBoxItemはまだ画面に表示されている場合と表示されていない場合がありますが、そこに到達していることを示す良い指標です。

コードサンプルについては、@ http://code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5eを参照してください。

    void resultListBox_ItemRealized(object sender, ItemRealizationEventArgs e)
    {
        if (!_viewModel.IsLoading && resultListBox.ItemsSource != null && resultListBox.ItemsSource.Count >= _offsetKnob)
        {
            if (e.ItemKind == LongListSelectorItemKind.Item)
            {
                if ((e.Container.Content as TwitterSearchResult).Equals(resultListBox.ItemsSource[resultListBox.ItemsSource.Count - _offsetKnob]))
                {
                    Debug.WriteLine("Searching for {0}", _pageNumber);
                    _viewModel.LoadPage(_searchTerm, _pageNumber++);
                }
            }
        }
    }
于 2012-11-14T17:28:41.180 に答える