C# 是否有任何方法可以从表单关闭事件的所有绑定元素中删除绑定?

C# 是否有任何方法可以从表单关闭事件的所有绑定元素中删除绑定?,c#,wpf,memory-leaks,binding,C#,Wpf,Memory Leaks,Binding,据此,以下代码导致WPF内存泄漏: myDataBinding = new Binding("Children.Count"); myDataBinding.Source = myGrid; myDataBinding.Mode = BindingMode.OneWay; MyTextBlock.SetBinding(TextBlock.TextProperty, myDataBinding); 如果我们在XAML中绑定一些值,也会发生同样的情况: <TextBlock Name="M

据此,以下代码导致WPF内存泄漏:

myDataBinding = new Binding("Children.Count");
myDataBinding.Source = myGrid; 
myDataBinding.Mode = BindingMode.OneWay;
MyTextBlock.SetBinding(TextBlock.TextProperty, myDataBinding);
如果我们在XAML中绑定一些值,也会发生同样的情况:

<TextBlock Name="MyTextBlock" Text="{Binding ElementName=myGrid, Path=Children.Count}" />
问题

是否有办法从窗体和子控件上的所有绑定元素中删除绑定?


这里似乎需要一些递归方法。

请记住,给出的示例非常孤立,在绑定情况下并不典型。参考文件概述了这一点

TextBlock控件绑定到 具有 引用回文本块(它是 myGrid儿童版的一个)

问题在于绑定是跨
UIElement
对象进行的,其中一个对象是容器的子对象,绑定到的属性不是
从属属性。这也是不典型的,因为大多数绑定发生在实现
INotifyPropertyChanged
的对象/属性上

如果应用程序中有多个这样的绑定,那么方法应该是在给定容器关闭时根据需要清除它们,如引用文档中所述


另一种方法是简单地公开视图使用的对象上所需的数据,而忽略对
UIElement
属性的绑定,这些属性不属于
dependencProperty
。虽然这并不总是切实可行,但它可以缓解上述问题。

在WPF 4中,即使对象不是INotifyPropertyChanged或DependencyObject,绑定到对象时也不必担心泄漏。此错误已修复


无论如何,我想这会很有帮助。

您能提供一个链接或参考,说明WPF 4中修复了这个错误吗?我发现它是用我自己的测试来修复的。从测试结果来看,这个问题在.Net 4中仍然存在。恐怕你是对的。看起来他们修复了一个bug,又添加了一个bug。我们有时仍然会遇到内存泄漏,可以通过添加“empty”INotifyPropertyChanged或INotifyCollectionChanged实现来解决。这很可悲。那么,这个答案是正确的还是错误的?这些评论使情况变得不明朗。我读到的其他内容似乎表明绑定到CLR属性仍然会导致泄漏。虽然这是一个很好的解释,但实际上并没有回答“有没有办法从窗体和子控件上的所有绑定元素中删除绑定?”
BindingOperations.ClearBinding(MyTextBlock, TextBlock.TextProperty);