C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■93808 / 親階層)  ListViewでデータが多いときの表示高速化
□投稿者/ りんく (7回)-(2020/02/06(Thu) 17:58:24)

分類:[.NET 全般] 

VisualStudio 2017
C#
WPF

1つのセルに番号と文字を表示し、1列に5つずつ表示するListViewを作成しています。
例図:
----------------
|1|2|3|4|5|
|あ|い|う|え|お|
----------------
|6|7|8|9|10|
|さ|し|す|せ|そ|
----------------
※下記のページのようなListViewです。
 http://www.magnuslindhe.com/2014/09/listbox-with-grid-layout-in-wpf/

上記のようなリストで10000件のデータを表示しなければなりませんが
改行するために、「UniformGrid」を使用しているため
仮想化ができずに表示がとてつもなく重いです。
※ちなみに「WrapPanel」も仮想化できず却下しました。
「VirtualizingStackPanel」を使用すれば早くなるのですが
【1列に5つ表示する】という条件が実現できずに困っています。
うまく実現できる方法はあるでしょうか?
ListViewでなくてもかまいません。


下記は実際の処理を端折り簡略化したものです。

// ItemsSource用のクラス
class Data
{
    public int Number {get;set;}
    public string Name {get;set;}
    public string Detail {get;set;}
}

ViewModelで、Dataクラスの配列を作成(10000件)

//XAML
<ListView ItemsSource="{Binding Dataクラスの配列}"
          ScrollViewer.CanContentScroll="True"
          VirtualizingPanel.ScrollUnit="Pixel">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <TextBlock Text="{Binding Number}"/>
                <TextBlock Grid.Row="1" Text="{Binding Name}"/>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="5"/> ※ここを「VirtualizingStackPanel」にして1列5つを実現できれば最強。
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: ListViewでデータが多いときの表示高速化 /りんく
 
上記関連ツリー

ListViewでデータが多いときの表示高速化 / りんく (20/02/06(Thu) 17:58) #93808 ←Now
Re[1]: ListViewでデータが多いときの表示高速化 / りんく (20/02/12(Wed) 11:40) #93860 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信