2012-12-17 154 views
0

我有一个WPF Caliburn.Micro应用程序,它有一个带有DataGrid的选项卡控件。 DataGrid中的列以编程方式设置。我可能需要关闭一个选项卡,然后再打开它。我得到一个异常,说DataGrid中已经存在一个列,但实际上根本没有列。你能帮我解决这个问题吗?WPF Caliburn.Micro DataGrid列

图片上,你可以在myGrid.Columns.Count等于0

Here you can see in the Watch window that myGrid.Columns.Count equals 0

回答

0

看起来你可能会加入一个已经存在的列(在以前的数据网格)的观察窗口看到到另一个数据网格。错误说,该列的Columns收集一个数据网格中存在,不neccessarily一个你正在试图将其添加到

DataGrid不能共享列 - 你需要从以前的DataGrid中删除列。这可能意味着你也有内存泄漏。如果您的选项卡项目虚拟机继承Screen,则可能需要覆盖OnDeactivate并清除列

或者,您可能能够通过该列获取对父网格的引用,并将其从其父级中移除,尽管我已经我自己并没有使用标准的.NET DataGrid(只是使用了Teleriks的一​​个),所以我不能确定 - 但是个人而言,清除关闭似乎是一个更清晰的实现。

它应该不是一个新实例的责任,在一个死亡实例之后清理,应该是班级自己清理后的责任(我一直告诉我的孩子们这个!)

+0

非常感谢。我忽略了OnDeactivate,而那个技巧。 –