我是使用Caliburn.micro的新手。我有一个简单的应用程序,它启动在ViewModel中运行的进程,侦听一些网络消息。当窗口关闭时,我想停止Viewmodel中的进程再听。
由于视图是UserControl,我怎么能告诉窗口正在关闭所以我的ViewModel可以正确清理?
答案 0 :(得分:2)
如果您的视图模型实现OnDeactivate
,则可以覆盖IScreen
(或者,如果您想要准备一些逻辑,则等效地继承自Screen
)。屏幕取消激活时将调用该方法,如果屏幕仅停用或关闭,则还会显示bool
标志。
请注意,只有来自您在引导程序中选择的IoC容器的视图模型
将他们的生命正确地连接起来。所以,如果你以这种方式获得虚拟机,它就会
正确地调用了OnInitialize
,OnActivate
和OnDeactivate
。如果您以任何其他方式(例如手动)实例化视图模型,并且您正在使用它们,例如Conductor
,你运气不好......
虽然我认为如果您使用IWindowManager
实施IScreen
的视图模型,它会尝试强制执行常规生命周期。
答案 1 :(得分:1)
除了“相信我 - 我是博士”之外,我还建议您查看IDeactivate
界面。
您可以实现该接口,使用Deactivate
方法并实现您需要的所有内容。