在XAML用户控件上删除DataContextChanged / Loaded事件处理程序

时间:2011-07-22 15:17:19

标签: c# wpf event-handling datacontext

在努力减少内存泄漏的过程中,我试图弄清楚,在为“DataContextChanged”事件或XAML用户控件上的“Loaded”事件添加处理程序后,即(UserControl.xaml.cs): / p>

    public MyUserControl()
    {
        InitializeComponent();
        DataContextChanged += new DependencyPropertyChangedEventHandler(MyUserControl_DataContextChanged);
        Loaded += new RoutedEventHandler(MyUserControl_Loaded);
    }

如果我需要删除它。 WPF是否处理此问题,还是需要手动删除它们?

1 个答案:

答案 0 :(得分:5)

简短回答 - 不。

只有在保持对象生根的情况下才需要删除处理程序,这意味着要防止垃圾回收。如果您创建一个子对象并让其中一个事件处理程序指向父对象,则不会发生这种情况,因为没有对该子对象的悬空引用。

如果你创建一个子对象并且父对象将其中一个事件处理程序指向子对象, 会发生,因为现在父对象有一个对象,它将保留它活着(扎根)。

如果您在上面指定,它完全是内部的 - 您在类中添加对您自己的类的引用。当用户控件被销毁时,它将没有引用在另一个类的事件处理程序中。所以你不需要删除事件处理程序。