我有一个 WPF Caliburn.Micro 应用程序,其中有一个带有 DataGrid 的选项卡控件。DataGrid 中的列以编程方式设置。我可能需要关闭一个选项卡,然后再次打开它。我得到一个例外,说 DataGrid 中已经存在一个列,尽管实际上根本没有列。你能帮我解决这个问题吗?
在图片上,您可以在 Watch 窗口中看到 myGrid.Columns.Count 等于 0
我有一个 WPF Caliburn.Micro 应用程序,其中有一个带有 DataGrid 的选项卡控件。DataGrid 中的列以编程方式设置。我可能需要关闭一个选项卡,然后再次打开它。我得到一个例外,说 DataGrid 中已经存在一个列,尽管实际上根本没有列。你能帮我解决这个问题吗?
在图片上,您可以在 Watch 窗口中看到 myGrid.Columns.Count 等于 0
看起来您可能正在将已经存在的列(在以前的数据网格中)添加到另一个数据网格。该错误表明该列存在于数据网格的集合Columns
中,而不一定是您尝试将其添加到的列
DataGrid
无法共享列 - 您需要从以前的数据网格中删除该列。这可能意味着您在某处也有内存泄漏。如果您的选项卡项 VM 继承Screen
,您可能需要覆盖OnDeactivate
并清除列
或者,您可以通过列获取对父网格的引用并将其从其父网格中删除,尽管我自己没有使用标准的 .NET DataGrid
(只使用 Teleriks 之一)所以我不能确定 - 就个人而言不过,关闭时的清除似乎是一个更清洁的实现。
在一个死实例之后清理不应该是类的新实例的责任,而应该是类自己清理的责任(我一直告诉我的孩子们这个!)