我想知道在什么时候取消订阅活动,到目前为止我通常在订阅之前取消订阅(或者大部分时间是从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 >
所以有时,我会允许用户在其他地方导航,然后让它回到同一个实例。用户在回来时导航的另一个时间是新实例。所以在第二种情况下,我认为我需要取消订阅该事件。
谢谢:)
答案 0 :(得分:1)
您似乎已经将ListBox用作基类,是否有理由不能覆盖SelectionChanged事件而不处理事件订阅?
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
// Do custom work.
// Call base class implementation.
base.OnSelectionChanged(e);
}