Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF-将绑定表达式从一个更改为另一个是否会导致内存泄漏?_Wpf_Data Binding_Memory Leaks - Fatal编程技术网

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
    ,传入要删除的元素的名称。这将从名称范围中删除它