Ben*_*ual 1 c# wpf datagrid memory-leaks
我加载了一个LiefItems列表.
List<LiefItem> list = this.LoadLiefItems();
Run Code Online (Sandbox Code Playgroud)
LiefItem正在以这种方式实现INotifyPropertyChanged:
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName) {
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Run Code Online (Sandbox Code Playgroud)
加载List后,我订阅了PropertyChanged:
foreach(var item in list) {
item.PropertyChanged += ItemOnPropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)
之后,List将用作DataGrid的ItemsSource.
我现在问我,如果第二次加载列表并将新List设置为我的DataGrid的ItemsSource,是从Memory中删除的第一个加载项,还是我有MemoryLeak因为我订阅了PropertyChanged并且没有取消订阅?
那里没有内存泄漏.
C#事件在下面实现了主题观察者模式.
引发事件时,实际发生的事情是调用注册到事件的对象的成员方法.
所以,如果你做的事情如下:
item.PropertyChanged += ItemOnPropertyChanged;
Run Code Online (Sandbox Code Playgroud)
这相当于:
item.PropertyChanged += this.ItemOnPropertyChanged;
Run Code Online (Sandbox Code Playgroud)
当事件被触发时,会调用该方法:
registeredObject.ItemOnPropertyChanged(propertyName);
Run Code Online (Sandbox Code Playgroud)
这意味着为注册事件的对象存储了引用.不是引发事件的对象.