WPF と WinRT (C# + XAML) はどちらも、 などをサポートするパネルを使用して UI 仮想化をサポートしVirtualizingStackPanel
ます。MVVM を使用する場合ビュー モデル (通常は ObservableCollection) の列挙可能なプロパティにバインドされたItemsControl
何らかの種類 ( ListBox
、など) を使用して行われます。GridView
アイテム コントロールは、表示されるアイテムに対してのみ UI を作成します。UI のみが仮想化されるため、UI 仮想化と呼ばれます。表示されていないアイテムのビューのみが作成されず、ユーザーが実際にアイテムにスクロールするまで延期されます。リスト内のビュー モデル オブジェクトはすべて事前に作成されています。したがって、提示する 100,000 人のリストがObservableCollection
ある場合、ユーザーがいつスクロールして表示するかに関係なく、作成される 100,000 のビュー モデルを含める必要があります。
私たちのアプリケーションでは、ビュー モデル レイヤーがこの仮想化の一部になるように実装したいと考えています。アイテム コントロールに、潜在的にロードできるアイテムの総数に適合するスクロール バーを表示する必要があります (そのため、監視可能なコレクションにより、アイテム コントロールは既に 100,000 個のアイテムを含んでいると認識し、スクロール バー ビュー ポートがただし、サーバーから実際のオブジェクトをロードできるように、新しいアイテムが表示されようとするたびに監視可能なコレクションに通知する必要があります。読み込まれたアイテム内にある種の進行状況インジケーターを表示し、オブザーバブル コレクションに読み込まれるとすぐにアイテムの実際のデータ テンプレートに置き換えられるようにしたいと考えています。
MVVM のガイドラインを可能な限り維持したいと考えていますが、パフォーマンスと応答性が優先されます。また、可能であれば再利用可能なソリューションを優先します。
これに取り組む最善の方法は何ですか?