我是使用 Caliburn.micro 的新手。我有一个简单的应用程序,它启动在 ViewModel 中运行的进程,以侦听一些网络消息。当窗口关闭时,我想停止 Viewmodel 中的进程不再监听。
由于视图是 UserControl,我如何判断窗口正在关闭,以便我的 ViewModel 可以正确清理?
OnDeactivate
如果您的视图模型实现(或者,如果您想准备一些逻辑,则IScreen
等效地继承自),您可以覆盖。Screen
当屏幕被停用时将调用该方法,bool
如果屏幕只是停用或关闭,也会有标志。
请注意,只有来自引导程序中选择的 IoC 容器的视图模型才能正确连接它们的生命周期。因此,如果您以这种方式获取 VM,它将正确地调用OnInitialize
,OnActivate
和OnDeactivate
调用。如果您以任何其他方式(例如手动)实例化视图模型并且您在 eg 中使用它们Conductor
,那么您就不走运了......
尽管我认为如果您使用IWindowManager
视图模型实现IScreen
,它将尝试强制执行常规生命周期。