从任何绑定中取消所有元素及其子元素的绑定
本文关键字:元素 绑定 任何 取消 | 更新日期: 2023-09-27 18:09:45
我想防止一些内存泄漏基于绑定到Static
成员或…in my WPF
Window
.
该窗口包含大量的UserControl
和element
资源,并有一些static
资源。我知道我应该unbind
bindings
到Static
类,以防止一些内存泄漏,我知道这种unbinding
:
BindingOperations.ClearAllBindings(....);
BindingOperations.ClearBinding(...., ....);
Element.ItemsSource= null;
但我的问题是:
你知道或推荐任何自动 Unbind
系统(一些类和代码作为一种机制来解除所有元素的绑定,以便在需要时调用它)在我们想要关闭窗口以确保没有任何绑定到Window
或其UserControls
及其elements
和任何sub-elements
中的任何元素时使用它吗?
我正在寻找一种安全的方法在窗口关闭事件中使用
我不相信有一种自动的方法可以做到这一点,但是我在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);
}
}