从哪里取消订阅自定义控件的事件

时间:2016-08-26 15:31:29

标签: wpf

我想知道在什么时候取消订阅活动,到目前为止我通常在订阅之前取消订阅(或者大部分时间是从xaml调用事件,然后由xaml处理,然后由xaml处理不需要做任何额外的工作)。 但是现在我想要在构造函数中订阅,我在哪里取消订阅?我试图在卸载事件中做到这一点, 但我的控件经常被卸载然后再次加载而不重新创建它。

修改 为了说清楚我想在不再需要该对象时取消订阅,我希望有可以覆盖的Dispose方法或类似的东西。 有什么想法吗?

示例代码

public class MYListBox : ListBox
{
    public MYListBox()
    {
        SelectionChanged += MYListBox_SelectionChanged;
        Unloaded += MYListBox_Unloaded;
    }

    private void MYListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
    }

    private void MYListBox_Unloaded(object sender, RoutedEventArgs e)
    {
        SelectionChanged -= MYListBox_SelectionChanged;
        Unloaded -= MYListBox_Unloaded;
    }
}

xaml

<UserControl x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wpfApplication1="clr-namespace:WpfApplication1">
<wpfApplication1:MYListBox />
</UserControl >

所以有时,我会允许用户在其他地方导航,然后让它回到同一个实例。用户在回来时导航的另一个时间是新实例。所以在第二种情况下,我认为我需要取消订阅该事件。

谢谢:)

1 个答案:

答案 0 :(得分:1)

您似乎已经将ListBox用作基类,是否有理由不能覆盖SelectionChanged事件而不处理事件订阅?

protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
    // Do custom work.

    // Call base class implementation.
    base.OnSelectionChanged(e);
}