DataGrid を含むタブ コントロールを持つ WPF Caliburn.Micro アプリケーションがあります。DataGrid の列はプログラムで設定されます。タブを閉じてから、もう一度開く必要がある場合があります。そして、列が DataGrid に既に存在するという例外が発生しますが、実際には列はまったくありません。これで私を助けてもらえますか?
図では、ウォッチ ウィンドウで myGrid.Columns.Count が 0 に等しいことがわかります。
DataGrid を含むタブ コントロールを持つ WPF Caliburn.Micro アプリケーションがあります。DataGrid の列はプログラムで設定されます。タブを閉じてから、もう一度開く必要がある場合があります。そして、列が DataGrid に既に存在するという例外が発生しますが、実際には列はまったくありません。これで私を助けてもらえますか?
図では、ウォッチ ウィンドウで myGrid.Columns.Count が 0 に等しいことがわかります。
(前のデータグリッドに) 既に存在する列を別のデータグリッドに追加しているようです。エラーは、必ずしも追加しようとしているものではなく、データグリッドのColumns
コレクションに列が存在することを示しています
DataGrid
列を共有できません - 前のデータグリッドから列を削除する必要があります。これは、どこかでメモリ リークが発生している可能性もあります。タブ項目 VM が継承するScreen
場合は、列をオーバーライドOnDeactivate
してクリアすることができます
または、列を介して親グリッドへの参照を取得し、その親から削除することもできますが、私自身は標準の .NET を使用していませんDataGrid
(Teleriks を使用しただけです)。ただし、クローズ時のクリアダウンはよりクリーンな実装のようです。
クラスの新しいインスタンスが死んだインスタンスの後に片付けをする責任を負うべきではありません。それ自体の後片付けをするのはクラスの責任であるべきです (私は子供たちにこれを言い続けています!)