問題:スクロール可能な領域に大量のデータを表示すると、パフォーマンスやユーザー エクスペリエンスが低下します。
試した:基本的に、ListBox に DataTemplate を設定して、VirtualizationMode を Recycle に設定し、ListBox 自体に固定の高さを設定して、入力されたデータのグリッドを表示します。以下の例のようなもの。
<ListBox x:Name="Items"
TabNavigation="Once"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Height="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,5">
<HyperlinkButton Content="Action" Margin="5"/>
<ContentControl
cal:View.Model="{Binding}"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ContentControl は<Grid>
、約 20 の静的な TextBlock と 20 のデータ バインド TextBlock で構成される、入力されたアイテムの全体的なレイアウトをフォーマットする別のビューから標準を取り込みます。
これは問題なく機能し、初期負荷が半分になります。ただし、問題は、高さを固定サイズにしない機能が必要であるため、親で使用可能なスペースを占有し、サイズを変更することもできます。おかげで@DanFox
、仮想化を呼び出すには何らかの形で高さを修正する必要があることがわかりました。そうしないと、RenderEngine はとにかく無限の余地があると考えています。
質問は次のとおりです。これを行うためのより良い方法はありますか、または少なくとも現在の手法を修正して、UX を向上させるにはどうすればよいですか? これらのアイテムを数百個生成する可能性があるため、仮想化のパフォーマンス強化が必要です。ただし、ユーザーがウィンドウのサイズを変更し、効果的にスクロールできるようにする必要もあります。
どんな洞察も大歓迎です、ありがとう、ハッピーホリデー!