c# - 这个单向绑定(bind)会泄漏内存吗?

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

问题:

此绑定(bind)是否会泄漏内存? 在我的测试中似乎没有泄漏,但我不明白为什么?

与属性名称的绑定(bind)只是来自 ClassA 的 getter,不实现 INotifyPropertyChanged。

最佳答案

您的 ClassA 未实现 INotifyPropertyChanged,但您绑定(bind)到类 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.

关于c# - 这个单向绑定(bind)会泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393198/

相关文章:

c# - Environment.SpecialFolder.ApplicationData 返回错误的文件夹

wpf - 使用 WPFPerf 分析 WPF 4.0 应用程序没有显示任何信息

WPF:根据相应的ViewModel(MVVM)切换UserControls

data-binding - 直接在 View 中绑定(bind)模型属性

swift - 观察字符串并使用 RxSwift 从 API 获取

c# - 更改 iOS 设备会使 iOS 应用程序崩溃

c# - 如何并行运行我的测试并遵守顺序(优先级)

c# - WCF 数据服务 (OData) 和 CORS

c# - 查找放置在 ListView Wpf 中的控件

c# - 如何在 NSUserDefaults.StandardUserDefaults 中保存日期时间(日期)?