移除XAML用户控件上的DataContextChanged/Loaded事件处理程序



在努力减少内存泄漏,我试图找出是否,添加一个处理程序到"DataContextChanged"事件或"Loaded"事件上的XAML用户控件,即(UserControl.xaml.cs):

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

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

简短的回答——否

你只需要删除处理程序时,他们将保持一个对象的根,这意味着防止其垃圾收集。如果您创建了一个子对象,并让它的一个事件处理程序指向父对象,则不会发生这种情况,因为没有对子对象的悬垂引用。

如果你创建了一个子对象,并且父对象将它的一个事件处理程序指向子对象,那么发生,因为现在父对象有一个对子对象的引用,这将使它保持活动(扎根)。

在上面指定的情况下,它完全是内部的——在类内部添加对自己类的引用。当用户控件被销毁时,它不会在另一个类的事件处理程序中有引用。因此您不需要删除事件处理程序。

相关内容

  • 没有找到相关文章

最新更新