这个 OneWay Binding 是否会泄漏内存?

Does this OneWay Binding leak memory?

我在 WPF 应用程序中使用 MVVM 模式,出于教育目的,我有一个关于内存泄漏的问题。

我一直在使用 Postsharp 库。

我的 ViewModel 如下所示:

public class MyViewModel : INotifyPropertyChanged
{
     private ClassA _myClassAField; //ClassA doesn't Implement INotifyPropertyChanged

     public MyViewModel(ClassA classAParameter)
     {
          _myClassAField = classAParameter;
     }

     [NotifyPropertyChanged]
     public string Name { get { return _myClassAField.Name; } }


     .....//Other Code.....    
}

Xaml:

<Textblock Text="{Binding Name, Mode=OneWay}"/>

问题:

这个绑定会泄漏内存吗? 在我的测试中它似乎没有泄漏,但我不明白为什么?

与 属性 名称的绑定只是来自未实现 INotify属性Changed 的​​ ClassA getter。

您的 ClassA 未实现 INotifyPropertyChanged,但您绑定到 class MyViewModel 中的 属性,它实现了!因此你不应该有内存泄漏。

供参考:https://blogs.msdn.microsoft.com/micmcd/2008/03/07/avoiding-a-wpf-memory-leak-with-databinding-black-magic/

There is an issue where WPF checks to find things that implement INotifyProperyChanged. If there is a databinding to something not implementing this interface, then it makes a record in a global table. That record doesn’t get cleaned up, as WPF has no way of checking when that DB record is no longer needed.