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

时间:2016-05-23 14:04:34

标签: c# wpf mvvm memory-leaks postsharp

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

问题:

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

对Property Name的绑定只是来自ClassA的getter,它不会实现INotifyPropertyChanged。

1 个答案:

答案 0 :(得分:2)

您的ClassA没有实现INotifyPropertyChanged,但您绑定了类MyViewModel中的某个属性,这样做了!因此,您不应该有内存泄漏。

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

  

WPF检查是否存在查找实现内容的问题   INotifyProperyChanged。如果没有数据绑定   实现此接口,然后它在全局表中创建记录。   该记录没有得到清理,因为WPF无法检查何时   不再需要DB记录。