WPF- virtualizingStackpanelがlistViewのアイテムを作成するときのためのイベントが必要です
-
09-10-2019 - |
質問
リストビューのためにコンテナがいつ完成したかを知る方法はありますか?
私がこれまでにやったことの詳細な説明
チェックボックスコントロールを含む列の1つにdatAtemplateを備えたListViewコントロールがあります。リストビューがバインドされているオブジェクトを使用してチェックボックスに動的にアクセスする方法を見つけました。
ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");
問題は、チェックボックスが「リセット」(チェックされていない)を、列を並べるたびに、または列を並べ替えるたびに並べ替えることです。これは、VirtualizingStackpanelが見える(またはほとんど見える)listViewItemのコンテナを吐き出しているだけだったためだと思いました。そして、チェックボックスはXAMLで定義されているデータセットの内側にあるため、またはリストがソートされている場合。
チェックボックスの個別のリストを作成し、実際のチェックボックスを使用して「クリック」イベントを使用して、私のリストの対応するチェックボックスの状態を変更することでこれを回避しました。次に、目に見えるすべてのチェックボックスの状態を変更するための小さな方法を作成しました。ユーザーはスクロールします...その結果、そもそも持っているはずのように見えます。
列を並べ替えた場合を除きます。列を並べ替えた直後にチェックボックスを(前のように)やり直してみましたが、うまくいきませんでした。私の最良の推測は、私が並べ替えた後、すぐにコンテナを作らないということです。
リストビューのためにコンテナがいつ完成したかを知る方法はありますか?
解決
チェックボックスをデータコンテキストでBooleanプロパティにISCheckedプロパティにバインドすると、この問題はありません。
VirtualizingStackPanelの全体的な目的は、必要でない限りListItemを作成しないことでメモリ使用量を削減することです。
実際には、チェックボックスのデータ側をコントロールから遠ざける必要があります。