C# WPF においてTabControl上にDataGridを配置したCSVビューアーを作成しました。
GにはDataTableをバインドしています。
このTabControlのデータ量が大きい場合にタブを切替え、当該タブを再選択すると表示までにラグがあります。
TabControlがアクティブでなくなったときに情報を保持していないようなのですが、
タブ切替後も情報を保持し無駄な描画をなくす方法、または表示部分以外の読込を遅延させ、スクロール時に読み込む方法はありますか?
実験してみたんですが10列10万行のデータでは起動はそれなりに遅かったですが、タブ切り替えは特に遅いとは感じませんでした(ListView DataGridどちらでも)
列を増やすのはListViewだと面倒なのでやってませんが、列が多い感じでしょうか?
再現するコードがあればよいのですが。。
あとはこの辺を試していただくのも手でしょうか。
[wpf - How to preserve control state within tab items in a TabControl - Stack Overflow](https://stackoverflow.com/questions/2080764/how-to-preserve-control-state-within-tab-items-in-a-tabcontrol
ありがとうございます。
こちらのテストデータは88列888行でした。データ量としてはそこまででもないので私の環境が貧弱なのかもしれません。
いただいたページも参考にさせて戴きます。
88列だと2秒ほど待つ感じになりました^^;
列方向のほうが影響が大きいみたいですね。
EnableColumnVirtualization="True" を付けると多少ましになりますが、引っかかる感じは残りました。
ColumnWidth="100" 等固定値を入れると気持ち効いている気がします(気のせいかもしれません^^;
おっしゃる通り列方向の影響が大きいですね。
どこかの質問サイトでtabcontrolのitemssourceにコレクションをバインドするのとtabitemに単一のオブジェクトをバインドするのでも違いが出るようでした。前者だとタブが再選択されるたびに読込されるとか書いてありました。ただtabitemへのバインドを動的にやるのも大変な気がします。
まずは、
<DataGrid
AutoGenerateColumns="True"
ColumnWidth="80"
EnableColumnVirtualization="True"
ItemsSource="{Binding Contents}" />
を試してみてください。
提示したソリューションも試してみましたが、88*888程度だと↑とあまり変わりませんでした。
ありがとうございます。
仮想化関係の設定を一通りTrueにしてみました。それなりにスピードは上がったかなと思います。
それにテストデータの88列はあまり扱わない列の量ですのでそこまで厳しく見なくても良いかなと思いました。。
初心者にお付き合いいただきありがとうございました。