スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

DataGridのアレはやばいメモ

VirtualizingStackPanel.VirtualizingMode="Recycling"
Ui仮想化のモードをリサイクル方式にするという設定。
何を「リサイクル」するのかと言えば、日本語で「アイテムコンテナ」、英語では「ItemContainers」。DataGridRowクラスの1階層下のオブジェクト?かなぁ。
検証してた記事を発見。
【WPF】VirtualizingStackPanel Recyclingはコンテナがリサイクルされる。
おお、なるほど。

でもねぇ。この再利用というのが、仕事ではクセモノでした。行番号の表示とかをした時、行ヘッダに表示しているんだけど、何も設定しなければ、番号の桁数によって幅が自動的に幅が変わる動作になる。どうもこれが悪さをしているようで、特に変な実装をしたわけでもないのに、レイアウトが崩れまくる。壊れたのか?と思うくらいに。そして、再検索か、ソートを実行しない限り治らない。スクロールしても一緒。どうにも上手く直らなかったので、デフォルトで"Standard"で実装するようにしている。

○ScrollViewer.CanContentScroll="True"
WPF メモ
論理的(True)と物理的(False)の違いらしい。
Trueにした時、なぜか一部の列ソートが異常に重くなるという現象があった。原因不明…。

○EnableColumnVirtualization="True"
列方向への仮想化を有効にするかどうか。
ある程度の列数以上になると重くなるという性質が見られるので、是非Trueにしたいところなんだけど、不意に落ちる。
なぜか落ちる。そして、スタックトレースを見てもわからないという詰みな状態。
CellTemplateや、ColumnHeaderTemplateにちょい複雑なテンプレートを仕掛けたりすると、より顕著になる。

○グルーピング全般
DataGridにはグルーピングという機能があり、そのグループ単位で小計を表示したりできる。当然、それ用のテンプレートを実装する必要があるけど。
ただし、グルーピングするだけで、UI仮想化全部無効という超イヤな仕様がWPF4ではあるので、大量データを検索する時には全く使えない。
自分でDataGridRowを改造したほうがマシ。
なお、WPF4.5では、幾分の改修が期待できる。期待するしかない。というか、WPF4では諦めろって事か?

○IsReadOnly="True"
すべての列に一々設定するのがめんど臭いからと、DataGridのIsReadOnlyをTrueにしてみた事がある。
たしかに、すべての列で、IsReadOnly=Trueな状態になったけど、セル(内の文字列)のコピーまで封印されるとは思わなかった。
なんにもできない。ある意味徹底したReadOnlyだった。
(追記)
なお、VirtualizingModeを「Standard」にした場合、スクロールしただけで、セル内のTextBlockと表示される文字列は使いまわされる事なく、うなぎのぼりにインスタンス数が増えていく事が確認されている。というか、確認した。
一番下までスクロール→増える。一番上までスクロール→更に増える。さらに(ry。
ええもうそれはそれはメモリをこれでもかと食べていく。そして、画面を閉じるまで離さない。
ただ、下手に小細工をすると、余計にリークすることも経験済なので、具体的な対策は保留中。
TextBlockはともかく、文字列はどうにもならんのかい!というツッコミをしてしまった。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。