WPF 从任何绑定中取消绑定所有元素及其子元素

WPF Unbind all elements and their sub elements from any bindings

我想防止一些基于绑定到 Static 成员或...在我的 WPF Window.

中的内存泄漏

这个 window 包括很多 UserControlelement 并且有一些 static 资源。 我知道我应该 unbind bindingsStatic 类 来防止一些内存泄漏,我知道这种 unbinding:

BindingOperations.ClearAllBindings(....);

BindingOperations.ClearBinding(...., ....);

Element.ItemsSource= null;

但我的问题是:

你知道或推荐任何自动 Unbind系统(一些类和代码作为一种机制来解除绑定所有元素以在必需)在我们想要关闭 window 时使用它以确保没有绑定到 Window 或其 UserControls 及其 elements 和任何 sub-elements???

我正在寻找一种安全方法用于window结束事件...

我不相信有自动执行此操作的方法,但我为此目的在 DependencyObject 上定义了我自己的扩展方法。

public static IEnumerable<DependencyObject> EnumerateVisualChildren(this DependencyObject dependencyObject)
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
    {
        yield return VisualTreeHelper.GetChild(dependencyObject, i);
    }
}

public static IEnumerable<DependencyObject> EnumerateVisualDescendents(this DependencyObject dependencyObject)
{
    yield return dependencyObject;

    foreach (DependencyObject child in dependencyObject.EnumerateVisualChildren())
    {
        foreach (DependencyObject descendent in child.EnumerateVisualDescendents())
        {
            yield return descendent;
        }
    }
}

public static void ClearBindings(this DependencyObject dependencyObject)
{
    foreach (DependencyObject element in dependencyObject.EnumerateVisualDescendents())
    {
        BindingOperations.ClearAllBindings(element);
    }
}