Wpf 当父窗口关闭时,如何处理动态加载的usercontrols/viewmodels
我们有一个启动子窗口的主窗口。该子窗口动态加载自定义用户控件。在这些usercontrols的构造函数中,我传递了一个主对象,该主对象从这个主对象生成一个特定于usercontrol的viewmodel,并将其指定为datacontext 所有这些都很有效。然而,我jst发现,当我关闭子窗口时,至少我的一些自定义用户控件仍然处于活动状态。我应该如何清理控件/视图模型?在主窗口关闭之前,似乎不会调用任何内容。没有析构函数,没有Dispatcher.ShutdowStart,没有dispose可用,没有关闭事件,我找不到任何东西Wpf 当父窗口关闭时,如何处理动态加载的usercontrols/viewmodels,wpf,window,dispose,Wpf,Window,Dispose,我们有一个启动子窗口的主窗口。该子窗口动态加载自定义用户控件。在这些usercontrols的构造函数中,我传递了一个主对象,该主对象从这个主对象生成一个特定于usercontrol的viewmodel,并将其指定为datacontext 所有这些都很有效。然而,我jst发现,当我关闭子窗口时,至少我的一些自定义用户控件仍然处于活动状态。我应该如何清理控件/视图模型?在主窗口关闭之前,似乎不会调用任何内容。没有析构函数,没有Dispatcher.ShutdowStart,没有dispose可用,
有人知道在窗口关闭后应该做些什么来正确清理吗?我认为您需要准确地思考创建视图和视图模型的责任,以及确定某个对象是否可以关闭的责任,等等 无论是什么东西创造了某种东西来摧毁它,这通常是个好主意。因此,如果您的子窗口正在创建自定义用户控件,它可能应该负责删除它们。但是,我相信如果您的对象都没有引用(或强事件订阅),那么它最终应该被垃圾收集。您可以实现一个终结器/析构函数,并将Debug.String输出到输出窗口,以查看何时可能最终发生这种情况。一个好的内存分析器也是一个好主意。但是,您也可能需要更精确的控制来告知ViewModel何时关闭 很难说在你的场景中应该发生什么,因为这实际上取决于你的具体设置。让我向您描述我在应用程序中的一个场景。我有几个视图显示在选项卡页面中。选项卡页面有一个关闭选项卡的X按钮,“我的视图”包含一个托管的Windows窗体控件,需要调用.Dispose()来清理资源,还需要通知它何时取消订阅“文件”菜单系统中的复合命令。所以,一开始,我有一个问题。。。当选项卡页面删除视图时,我的ViewModel如何取消订阅命令?WPF控件中包含的视图如何知道它何时被删除?这是我想到的
无论如何,我知道这不是一个确切的答案,但希望它能帮助您想出一些解决您自己问题的想法我相信您需要准确思考创建视图和视图模型的原因,以及确定某个对象是否可以关闭的原因,等等 无论是什么东西创造了某种东西来摧毁它,这通常是个好主意。因此,如果您的子窗口正在创建自定义用户控件,它可能应该负责删除它们。但是,我相信如果您的对象都没有引用(或强事件订阅),那么它最终应该被垃圾收集。您可以实现一个终结器/析构函数,并将Debug.String输出到输出窗口,以查看何时可能最终发生这种情况。一个好的内存分析器也是一个好主意。但是,您也可能需要更精确的控制来告知ViewModel何时关闭 很难说在你的场景中应该发生什么,因为这实际上取决于你的具体设置。让我向您描述我在应用程序中的一个场景。我有几个视图显示在选项卡页面中。选项卡页面有一个关闭选项卡的X按钮,“我的视图”包含一个托管的Windows窗体控件,需要调用.Dispose()来清理资源,还需要通知它何时取消订阅“文件”菜单系统中的复合命令。所以,一开始,我有一个问题。。。当选项卡页面删除视图时,我的ViewModel如何取消订阅命令?WPF控件中包含的视图如何知道它何时被删除?这是我想到的