12
WP8 LongListSelector のページング処理 Windows Phoneハッカソン 2013/1/19 青木宣明 @kumar0001

Wp8 longlistselectorでのページング処理

Embed Size (px)

DESCRIPTION

Windows Phone 8のLongListSelectorで、リスト終端でデータを追加読み込みする処理(ページング処理)の実現方法を紹介します。

Citation preview

Page 1: Wp8 longlistselectorでのページング処理

WP8版LongListSelectorでのページング処理

Windows Phoneハッカソン 2013/1/19

青木宣明 @kumar0001

Page 2: Wp8 longlistselectorでのページング処理

Windows Phoneでのリスト表示

ListBox (Windows Phone 7.5) LongListSelector (Windows Phone 8)

Page 3: Wp8 longlistselectorでのページング処理

ページング処理とは?

リストに表示するデータ

• データソースからデータを取得できる1回あたりの件数に上限があることが多い

Webサービスなど

Twitter, ATND, …

• データソースからのデータ取得パラメータ

取得条件(検索キーワードなど)

何件取得するか

何件目から取得するか

Page 4: Wp8 longlistselectorでのページング処理

ListBoxへのデータ表示

ItemsSourceプロパティにIEnumerableなデータをBindingする

• データソースから取得したデータを格納したListなど

ItemsSource

List box item 01List box item 02List box item 03

…Bind

Page 5: Wp8 longlistselectorでのページング処理

データ取得のタイミング

データソースから決まった件数ずつしか取得できないときは?

• ItemsSourceにBindしたデータを取得ごとに更新する

• いつ更新すればいいのか?

• 1つの方法は「ListBoxが最後まで表示した」ときにデータを取得する

Page 6: Wp8 longlistselectorでのページング処理

ListBox(WP 7.5)の場合

Listの最後を表示したことを、VisualStateで検知できる

• MSDNブログ「WP7.5 でリストボックスのスクロールエンドで圧縮されるときのイベントを取る」(高橋忍)

http://blogs.msdn.com/b/shintak/archive/2011/08/06/10193347.aspx

以下の状態が定義されている

VisualStateGroup VisualState 意味

VerticalCompresion CompressionTop 最上段でのスクロールエンド

CompressionBottom 最下段でのスクロールエンド

NoVerticalCompression スクロールエンドでない

HorizontalCompression CompressionLeft 左端でのスクロールエンド

CompressionRight 右端でのスクロールエンド

NoHorizontalCompression スクロールエンドでない

Page 7: Wp8 longlistselectorでのページング処理

ListBox(WP 7.5)の場合

手順1. VisualStateGroupをScrollViewerで再

定義するScrollViewerはListBoxに含まれる

2. ScrollViewerのVisualStateGroup“VerticalCompression”の状態変化イベントにハンドラを登録CurrentStateChangingイベント

3. イベントハンドラでは、新しい状態がCompressionBottomであればデータを取得する

Page 8: Wp8 longlistselectorでのページング処理

ListBox(WP 7.5)の場合

デモ

Page 9: Wp8 longlistselectorでのページング処理

LongListSelector(WP8)の場合

WP8で標準に取り込まれたLongListSelectorでは?

• ListBoxとは内部構造が変わっていてScrollViewerがない

• 別の方法が必要

ItemRealizedイベント

• LLSの要素が表示されるタイミングで発生

仮想化されているので、リスト要素を順次生成している

Page 10: Wp8 longlistselectorでのページング処理

LongListSelector(WP8)の場合

LLSがデータを順次表示していって、次の条件を満たせば最後の要素が表示されたとみなす• e.ItemKindがLongListSelectorItemKind.Itemであるグループヘッダ生成の場合も呼びだされる

• ItemsSourceの最後の要素と、生成されたデータが一致する

画面に表示されていないので、ListBoxの場合と同じではない

Page 11: Wp8 longlistselectorでのページング処理

LongListSelector(WP8)の場合

デモ

Page 12: Wp8 longlistselectorでのページング処理

まとめ

データソースからページ単位で取得する場合、データ取得のタイミングとして以下が使える

• ListBox

VerticalCompresion VisualStateGroupのCompressionBottom状態を検知する

• LongListSelector

ItemRealizedイベントでItemsSourceの最後のデータが表示されたことを検知する