什么时候应该注册/取消注册事件/消息

时间:2011-10-28 13:17:25

标签: wpf silverlight mvvm-light

我正在查看我的应用程序中的事件和消息,但我不确定它们的生命周期以及何时应该注册它们。

在控件的构造函数中,我注册接收消息(或事件处理程序)。虽然我认为这是一个错误,但我没有取消注册

例如,在此帖子中:MVVM Messaging vs RaisePropertyChanged<T>它表示要取消注册Unloaded事件。

我的应用程序中的Hwever我正在使用Telerik控件(它可能发生在其他控件中)并且我在主屏幕中有一个窗口。当我取消停靠屏幕时,即使窗口本身似乎没有关闭,UnloadedLoaded事件也会触发。

因此,如果我在Unloaded取消注册,则会导致问题。那么我应该在什么时候这样做?

2 个答案:

答案 0 :(得分:2)

一般来说,一旦我知道它们不再相关,我就会取消注册事件,这可能会有所不同。如果发生了卸载,但窗口仍在停留,那么加载也是有意义的(正如你所提到的)。在这种情况下,您可能应该在加载时注册它们,并在卸载时取消注册它们。这应该保证匹配。如果你需要在userControl / page的生命周期内使用它,我看不到比你可以使用的卸载更好的事件。

答案 1 :(得分:2)

一般情况下,我同意D..'s answer,但有些情况下,Loaded和Unloaded事件处理程序会多次调用。我通过在注册之前添加bool变量来检查这个问题。

示例代码:

bool _hasRegistered; // default value is false

OnLoaded()
{
    //
    if (!this._hasRegistered)
    {
        // your register code here
        this._hasRegistered = true;
    }
}

OnUnloaded()
{
    // your un-register code here
}