1

WindowsPhoneリストボックスコントロールでデータをページングする他の解決策があるかどうか知りたいです。スクロールバーの位置を手動でチェックすることでデータのページングに慣れており、画面の最後に到達すると、さらに多くのデータが読み込まれます。

質問したいのですが、これを行う他の解決策(より良い)はありますか(WP7またはWP8)。私が言及した私の解決策は、多くのコード(カスタムイベント、スクロールリスナーなど)の記述に関連しています。WindowsPhonesdk 8.0がリリースされたので、もっと簡単な解決策があるかもしれません...

4

2 に答える 2

2

WP8 の無限スクロールの鍵は、LongListSelector コントロールと 2 つのイベントの処理です。

ItemRealized (アイテムをロード) および ItemUnrealized (アイテムを削除)。

このイベントは、検出された静的テンプレートのサイズ (高さ) に基づいて自動的に発生します。これは、完全に自動化されたオンデマンド アクションです。エンジンは、いつ新しいアイテムを取得するか、古いアイテムを削除するかを「認識」しています。

不可欠:

  1. テンプレートのサイズは手動で設定する必要があります。そうしないと、同時にロードされるアイテムの数が予測できなくなります。たとえば、テンプレートに画像がある場合、特定の高さがない限り、スペースとしてカウントされません。
  2. リスト項目の ContentPresenters はリサイクルしているようです。したがって、1 つの項目テンプレートをコードから変更すると、別の項目の新しいテンプレートを魔法のように取得できます! ;) ですから... ItemTemplates を覚えておいて、2 つ以上必要な場合はすべての ItemRealized イベントに設定してください。
  3. BitmapImage データのアンロードはかなりバグがあります。アイテム テンプレートに画像がある場合は、ItemUnrealized イベントでキャッシュを手動で解放する必要があります。また、Image.Source を null に設定してバインディングを破棄し、リセットします。元のソース BitmapImage を、decodepixelwidth/height を最小限に抑えた新しい小さなサイズのソースに設定します (null にすることはできません)。それがメモリリークと戦う唯一の方法であることがわかりました。詳細はこちらhttps://stackoverflow.com/a/14225871/1449841
  4. データ仮想化のためのバインドされたコレクションは、必要なだけ大きくすることができます (100 万でも構いません)。したがって、そのコレクションを一度バインドする必要があります。そうすれば、言及されたイベントによって項目データをロードおよびアンロードすることだけができます。
于 2013-01-13T22:52:28.327 に答える
0

HorizontalCompressionおよびである VisualStatesGroups を使用できるためVerticalCompression、 の底付近にいることを検出できますListBox

これは Mango 以来存在しているため、新しい WP8 機能ではありませんが、現在の「ハッキー」イベント ハンドラーのソリューションよりも確実に優れています。

これについては、MSDN ブログの「Windows Phone Mango の変更、リストボックス: 圧縮 (スクロールの終了) 状態を検出する方法」を参照してください。

コントロールを変更することを避けていない場合はLongListSelectorWindows Phone Toolkit (これは WP8 でネイティブであることに注意してください) にあり、問題にアプローチするためのより良い方法である可能性があります。リンクされた記事で、これが古い記事が Mango で得たものを実行する新しい方法です。

于 2013-01-09T10:02:57.467 に答える