WPF-将绑定表达式从一个更改为另一个是否会导致内存泄漏?
两个问题:WPF-将绑定表达式从一个更改为另一个是否会导致内存泄漏?,wpf,data-binding,memory-leaks,Wpf,Data Binding,Memory Leaks,两个问题: 如果在触发器中替换绑定,是否可能导致内存泄漏?例如,如果我的Text属性绑定到某个依赖项属性,并且在触发器中我在Text上设置了不同的绑定,如下面的示例所示,是否有泄漏的可能 也许是某种“废弃”的装订?我知道如果我绑定到非依赖性属性/对象,那么我会有漏洞,但是上面的场景会导致漏洞吗 我在某个地方读到(我现在找不到),在某些情况下,如果将属性x:Name赋予元素,则可能导致内存泄漏。这些案例是什么?我相信在我的模板中命名我的元素是完全可以的 谢谢 如果我通过触发器更改绑定,是否可能
触发器
中替换绑定
,是否可能导致内存泄漏?例如,如果我的Text
属性绑定到某个依赖项属性,并且在触发器中我在Text
上设置了不同的绑定,如下面的示例所示,是否有泄漏的可能
也许是某种“废弃”的装订?我知道如果我绑定到非依赖性属性/对象,那么我会有漏洞,但是上面的场景会导致漏洞吗x:Name
赋予元素,则可能导致内存泄漏。这些案例是什么?我相信在我的模板中命名我的元素是完全可以的INotifyPropertyChanged
,那么您就不会意外地导致绑定源被保留。绑定表达式使用弱引用来引用绑定对象,因此不会导致泄漏
具体来说,您发布的示例看起来不错,不应该导致泄漏
我在某个地方读到(我现在找不到),在某些情况下,如果给元素赋予属性x:Name,则可能导致内存泄漏
这种情况是当您从UI树中删除带有x:Name
指令的元素时。原因是x:Name
不只是设置Name
属性;它还将元素注册到名称范围中,该注册涉及一个强引用。如果从UI中删除命名元素而不同时从名称范围中删除它,那么它将保持活动状态,直到名称范围变得不可访问为止
删除命名元素时,在父视图中调用UnregisterName
,传入要删除的元素的名称。这将从名称范围中删除它
如果我通过触发器更改绑定,是否可能导致内存泄漏
总的来说,没有比单一绑定更大的泄漏可能性。这并不是说泄漏是不可能的,但是如果您遵循最佳实践并确保绑定到的任何东西都实现了INotifyPropertyChanged
,那么您就不会意外地导致绑定源被保留。绑定表达式使用弱引用来引用绑定对象,因此不会导致泄漏
具体来说,您发布的示例看起来不错,不应该导致泄漏
我在某个地方读到(我现在找不到),在某些情况下,如果给元素赋予属性x:Name,则可能导致内存泄漏
这种情况是当您从UI树中删除带有x:Name
指令的元素时。原因是x:Name
不只是设置Name
属性;它还将元素注册到名称范围中,该注册涉及一个强引用。如果从UI中删除命名元素而不同时从名称范围中删除它,那么它将保持活动状态,直到名称范围变得不可访问为止
删除命名元素时,在父视图中调用UnregisterName
,传入要删除的元素的名称。这将从名称范围中删除它