我相信你需要考虑精确什么是负责创建你的意见和你的ViewModels,什么是负责确定是否不是可以关闭与否等
它通常是一个好主意因为无论什么创造东西来摧毁它。因此,如果您的子窗口正在创建自定义用户控件,它可能应该负责将其删除。不过,我相信如果你的对象都没有引用(或强大的事件订阅),它应该最终被垃圾收集。您可以实现一个终结器/析构函数,并将Output.String输出到输出窗口,以查看最终可能发生的时间。一个好的内存分析器也可能是一个好主意。但是,您也可能需要更精确地控制ViewModel何时关闭。
很难确切地说出您的情况会发生什么,因为它确实取决于您的确切和特定的设置。让我向你描述一下我的应用程序中的场景。我有几个视图显示在标签页中。标签页有一个X按钮来关闭标签,我的视图包含一个托管的Windows窗体控件,它需要调用.Dispose()来清理资源,并且需要知道何时取消订阅复合命令文件菜单系统。所以,最初,我有一个问题...当标签页删除视图时,我的ViewModel如何取消订阅命令? WPF控件中包含的视图如何知道它何时被删除?这里就是我想出了
- 标签页本身不应该告诉我的程序,如果一个视图可以或不能
- 我需要取消closing事件在程序逻辑的情况下,才能关闭(文件得救了吗?是/否/取消),当它被关闭,以便
- 我需要检测的能力,我可以就在那个时候清理/注销
我的解决办法,以实现我的视图模型称为IRemovable的接口,公开了一个可移动布尔值和一个返回boolea的Remove()方法n(被删除或没有)。如果Removable为true,我的选项卡控件只显示X按钮,Tab Control的Closing激发了IRemovable ViewModel的Remove(),如果它返回false,则将ViewModel的Remove返回false的事件参数Canceled属性设置为true。
因此,删除视图模型可能会提示用户进行确认,从命令中取消注册等。该视图可以处理任何Windows窗体组件中的Closed事件和调用Dispose等(当然,我必须检查我的View.DataContext是IRemovable)。
不管怎样,我知道这是不是一个确切的答案,但希望它可以帮助你想出如何解决你自己的问题
你怎么知道你的控件仍然活跃的一些想法? –