如何在窗口关闭时使用Caliburn.micro在ViewModel上运行代码

时间:2013-05-03 19:08:19

标签: c# wpf

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

由于视图是UserControl,我怎么能告诉窗口正在关闭所以我的ViewModel可以正确清理?

2 个答案:

答案 0 :(得分:2)

如果您的视图模型实现OnDeactivate,则可以覆盖IScreen(或者,如果您想要准备一些逻辑,则等效地继承自Screen)。屏幕取消激活时将调用该方法,如果屏幕仅停用或关闭,则还会显示bool标志。

请注意,只有来自您在引导程序中选择的IoC容器的视图模型 将他们的生命正确地连接起来。所以,如果你以这种方式获得虚拟机,它就会 正确地调用了OnInitializeOnActivateOnDeactivate。如果您以任何其他方式(例如手动)实例化视图模型,并且您正在使用它们,例如Conductor,你运气不好......

虽然我认为如果您使用IWindowManager实施IScreen的视图模型,它会尝试强制执行常规生命周期。

答案 1 :(得分:1)

除了“相信我 - 我是博士”之外,我还建议您查看IDeactivate界面。

您可以实现该接口,使用Deactivate方法并实现您需要的所有内容。

Caliburn documentation on lifecycle