1

wp7で検索アプリを作っています。すべてのレコードのデータは、ユーザー コントロールにバインドされます。ページ番号を与える代わりに、無限ロードを導入しました。そのため、画面内の UserControl のインスタンス数が増えると、あるページから別のページ (プレビュー ページや設定ページなど) への遷移や、そのページから現在のページへの戻りが遅くなります。設計を変更することはできません (無限ロードの概念)。

このシナリオを処理する方法は何ですか? コントロールの可視性を変更するのはどうですか? また、参考や提案をいただければ幸いです。

WPFと Silverlight にタグを付けたのは、バインディングが同じように行われるためです。

編集私が尋ねたこの質問を確認してください。リストボックスに UserControl があるため、垂直方向のオフセットが維持されていません。したがって、ItemsControl を使用して scrollViewer を囲む以外に選択肢はありませんでした。ItemsControl には、内部に itemsControl がある 5 ~ 6 個のユーザー コントロールのリストが含まれています。このような場合、仮想化は行われない可能性があると思いました。私は正しいですか?

4

2 に答える 2

2

WPF では、これは仮想化によって行われます。

を使用すると、実際にVirtualizationは の 1 つのコピー (またはいくつかのコピー) のみUserControlが作成され、別のユーザー コントロールに切り替えると、実際にはDataContext、コントロールがバインドされている がスワップ アウトされるだけです。実際には新しい を作成しませんUserControl

たとえば、VirtualizingStackPanel100,000 個のアイテムがあり、一度に 10 個しか表示されない場合、約 14 個のアイテム (スクロール バッファー用の余分なアイテム) のみがレンダリングされます。スクロールすると、DataContextこれらの 14 個のコントロールの背後にあるものが変更されますが、実際のコントロール自体は決して置き換えられません。対照的に、レギュラーStackPanelはロード時に実際に 100,000 個のアイテムをレンダリングするため、アプリケーションのパフォーマンスが大幅に低下します。

ItemsControl の仮想化に関するこの質問は、おそらく正しい方向に進むことができます。

于 2012-04-23T19:54:54.030 に答える
1

この投稿を見てください、私はリコによって提供される解決策があなたが探しているものであると信じています。:)

于 2012-04-24T05:20:55.347 に答える