簡體   English   中英

刪除 XAML 用戶控件上的 DataContextChanged/Loaded 事件處理程序

[英]Removing DataContextChanged/Loaded Event Handlers on XAML User Control

為了減少 memory 泄漏,我試圖弄清楚是否在將處理程序添加到 XAML 用戶控件上的“DataContextChanged”事件或“Loaded”事件后,即(UserControl.Z44CC44B81911F4BA45817C)

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

如果我需要刪除它。 WPF 是否處理此問題,還是我需要手動刪除它們?

簡短的回答——不。

您只需要在處理程序保持 object 為根時刪除處理程序,這意味着防止其垃圾收集。 如果您創建子 object 並使其事件處理程序之一指向父 object,則不會發生這種情況,因為沒有對子 object 的懸空引用。

It will happen if you create a child object and the parent object points one of its event handlers into the child object, because now the parent object has a reference to the child object that will keep it alive (rooted).

在您上面指定的情況下,它完全是內部的——您在 class 內添加對您自己的 class 的引用。 當用戶控件被銷毀時,它不會有其他類的事件處理程序中的引用。 所以你不需要刪除事件處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM