我希望在Static
WPF
Window
的基础上阻止一些内存泄漏,而不是UserControl
成员。{/ p>
此窗口包含许多element
和static
,并且有一些unbind
资源。
我知道我应该bindings
Static
到unbinding
类来防止一些内存泄漏,我知道这种BindingOperations.ClearAllBindings(....);
BindingOperations.ClearBinding(...., ....);
Element.ItemsSource= null;
:
Unbind
但我的问题是:
您是否知道或推荐任何自动 Window
系统(某些类和代码可用作取消绑定所有元素以在需要时调用它的机制),以便在我们需要关闭时使用它窗口,以确保没有任何绑定UserControls
或其elements
及其sub-elements
和任何cat /etc/yum.repos.d/CentOS-Base.repo
???
我发现在窗口关闭事件中使用安全方式 ...
答案 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);
}
}