0

我是使用 Caliburn.micro 的新手。我有一个简单的应用程序,它启动在 ViewModel 中运行的进程,以侦听一些网络消息。当窗口关闭时,我想停止 Viewmodel 中的进程不再监听。

由于视图是 UserControl,我如何判断窗口正在关闭,以便我的 ViewModel 可以正确清理?

4

2 回答 2

2

OnDeactivate如果您的视图模型实现(或者,如果您想准备一些逻辑,则IScreen等效地继承自),您可以覆盖。Screen当屏幕被停用时将调用该方法,bool如果屏幕只是停用或关闭,也会有标志。

请注意,只有来自引导程序中选择的 IoC 容器的视图模型才能正确连接它们的生命周期。因此,如果您以这种方式获取 VM,它将正确地调用OnInitialize,OnActivateOnDeactivate调用。如果您以任何其他方式(例如手动)实例化视图模型并且您在 eg 中使用它们Conductor,那么您就不走运了......

尽管我认为如果您使用IWindowManager视图模型实现IScreen,它将尝试强制执行常规生命周期。

于 2013-05-03T19:11:41.223 回答
1

除了“相信我-我是医生”所说的之外,我还建议您看一下IDeactivate界面。

您可以实现该接口,拥有一个Deactivate方法并在那里实现您需要的一切。

Caliburn 生命周期文档

于 2013-05-03T19:18:36.517 回答