此单向绑定是否泄漏内存



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

我一直在使用Postsharp库。

我的视图模型如下所示:

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}"/>

问题:

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

与属性名称的绑定只是来自不实现 INotifyPropertyChanged 的类 A 的 getter。

您的ClassA没有实现INotifyPropertyChanged但您绑定到类 MyViewModel 中的属性,它确实如此!因此,您不应该有内存泄漏。

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

存在一个问题,即 WPF 检查以查找实现的内容 不可更改的专有属性。 如果存在数据绑定到某些不是 实现此接口,然后在全局表中创建记录。 该记录不会被清理,因为 WPF 无法检查何时 不再需要该数据库记录。

最新更新