这个 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
中的 属性,它实现了!因此你不应该有内存泄漏。
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.
我在 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
中的 属性,它实现了!因此你不应该有内存泄漏。
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.