我在 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 无法检查何时 不再需要该数据库记录。