private ObservableCollection<Contact> _contacts;
在我的类的构造函数中,我创建了它。
_contacts = new ObservableCollection<Contact>();
我有方法可以添加和删除我的集合中的项目。我想要跟踪实现了IPropertyChanged接口的实体在我的集合中所做的更改,因此我订阅了它们的PropertyChanged事件。
public void AddContact(Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged += new PropertyChangedEventHandler(Contact_PropertyChanged);
_contacts.Add(contact);
}
public void AddContact(int index, Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged += new PropertyChangedEventHandler(Contact_PropertyChanged);
_contacts.Insert(index, contact);
}
当我从集合中移除一个实体时,我会取消订阅PropertyChanged事件。据说这是为了允许实体被垃圾回收并避免内存问题。
public void RemoveContact(Contact contact)
{
((INotifyPropertyChanged)contact).PropertyChanged -= Contact_PropertyChanged;
_contacts.Remove(contact);
}
所以,我希望这一切都很好。现在,我需要在我的一个方法中清除集合。我的第一个想法是调用_contacts.Clear()
。然后我开始想,这是否会释放那些事件订阅?我需要创建自己的清除方法吗?类似这样:
public void ClearContacts()
{
foreach(Contact contact in _contacts)
{
this.RemoveContact(contact);
}
}
我希望这里的.NET C#专家们能够帮我解决疑惑,或告诉我哪里出了问题。