为了减少内存泄漏,我试图弄清楚在向 XAML 用户控件上的“DataContextChanged”事件或“Loaded”事件添加处理程序后,即 (UserControl.xaml.cs):
public MyUserControl()
{
InitializeComponent();
DataContextChanged += new DependencyPropertyChangedEventHandler(MyUserControl_DataContextChanged);
Loaded += new RoutedEventHandler(MyUserControl_Loaded);
}
如果我需要删除它。 WPF 会处理这个问题,还是我需要手动删除它们?
最佳答案
简短的回答——没有。
您只需要在处理程序使对象保持根目录时删除处理程序,这意味着阻止其垃圾收集。如果您创建子对象并将其事件处理程序之一指向父对象,则不会发生这种情况,因为没有对子对象的悬空引用。
如果您创建一个子对象并且父对象将其事件处理程序之一指向子对象,它将会发生,因为现在父对象有一个对将保留它的子对象的引用活着( Root )。
在您上面指定的情况下,它完全是内部的——您在类中添加了对您自己的类的引用。当用户控件被销毁时,它不会在另一个类的事件处理程序中有引用。因此您不需要删除事件处理程序。
关于c# - 删除 XAML 用户控件上的 DataContextChanged/Loaded 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792157/