WPF取消绑定任何绑定

时间:2015-08-26 00:49:45

标签: c# wpf data-binding memory-leaks unbind

我希望在Static WPF Window的基础上阻止一些内存泄漏,而不是UserControl成员。{/ p>

此窗口包含许多elementstatic,并且有一些unbind资源。 我知道我应该bindings Staticunbinding类来防止一些内存泄漏,我知道这种BindingOperations.ClearAllBindings(....); BindingOperations.ClearBinding(...., ....); Element.ItemsSource= null;

Unbind

但我的问题是:

您是否知道或推荐任何自动 Window系统(某些类和代码可用作取消绑定所有元素以在需要时调用它的机制),以便在我们需要关闭时使用它窗口,以确保没有任何绑定UserControls或其elements及其sub-elements和任何cat /etc/yum.repos.d/CentOS-Base.repo ???

中的任何元素

我发现在窗口关闭事件中使用安全方式 ...

1 个答案:

答案 0 :(得分:3)

我不相信有一种自动方法可以做到这一点,但为了这个目的,我在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);
    }
}