1

コンテナがListView用に作成され終わったことを知る方法はありますか?

私がこれまでにしたことの詳細な説明

CheckBoxコントロールを含む列の1つにDataTemplateがあるListViewコントロールがあります。ListViewがバインドされているオブジェクトを使用してCheckBoxに動的にアクセスする方法を理解しました。

                ListViewItem lItem = (ListViewItem)ListView.ItemContainerGenerator.ContainerFromItem(trackToHandle);
                CheckBox checkBoxToHandle = FindChild<CheckBox>(lItem, "CheckBox");

問題は、スクロールしすぎたり、列を並べ替えたりするたびに、チェックボックスが「リセット」される(チェックが外れる)ことです。これは、VirtualizingStackPanelが表示されている(またはほとんど表示されている)ListViewItemのコンテナーのみを吐き出しているためであることがわかりました。また、CheckBoxはXAMLで定義されたDataTemplate内にあるため、表示されなくなるたびに破棄されます。またはリストが並べ替えられたとき。

これを回避するには、チェックボックスの個別のリストを作成し、実際のチェックボックスの「クリック」イベントを使用して、リスト内の対応するチェックボックスの状態を変更します。次に、表示されているすべてのチェックボックスの状態を変更するための小さなメソッドを作成しました。ユーザーがスクロールします...結果として、そもそも本来あるべきように見えます。

列を並べ替えるときを除いて。列を並べ替えた直後に(以前のように)チェックボックスを再実行させようとしましたが、機能しませんでした。私の推測では、並べ替えた後すぐにコンテナが作成されるわけではありません。

コンテナがListView用に作成され終わったことを知る方法はありますか?

4

1 に答える 1

1

チェックボックスの IsChecked プロパティをデータ コンテキストのブール プロパティにバインドすると、この問題は発生しません。

VirtualizingStackPanel の全体的な目的は、必要でない限り ListItem を作成しないことでメモリ使用量を削減することです。

実際には、チェックボックスのデータ側をコントロールから離す必要があります。

于 2010-10-21T03:50:26.643 に答える