我正在查看我的应用程序中的事件和消息,但我不确定它们的生命周期以及何时应该为它们注册。
此刻,我在控件的构造函数中注册以接收消息(或事件处理程序)。我没有注销,但我认为这是一个错误
例如在这个帖子中:MVVM Messaging vs RaisePropertyChanged<它说注销Unloaded
事件。>
然而,在我的应用程序中,我使用Telerik控件(它可能发生在其他控件),我在主屏幕内有一个窗口。当我卸载屏幕时,在其他时间Unloaded
和Loaded
事件触发,即使窗口本身似乎没有关闭。
因此,如果我在Unloaded
中注销,那么它将导致一个问题。那么我应该在什么时候做呢?
一般来说,一旦我知道事件不再相关,我就注销它们,这可能会有所不同。如果卸载正在发生,但窗口仍然存在,那么加载也正在发生(如您所提到的)。在这种情况下,也许您应该在load中注册它们,并在unload中注销它们。这应该能保证匹配。如果您需要在userControl/page的生命周期内使用它,我认为没有比Unload更好的事件了。
总的来说,我同意D…的答案,但有一些情况下,加载和卸载事件处理程序调用不止一次。我通过在注册前添加bool变量来检查这个问题。
示例代码:
bool _hasRegistered; // default value is false
OnLoaded()
{
//
if (!this._hasRegistered)
{
// your register code here
this._hasRegistered = true;
}
}
OnUnloaded()
{
// your un-register code here
}