事件未清除
本文关键字:清除 事件 | 更新日期: 2023-09-27 17:56:44
我正在为可观察的集合添加一个更改的事件。
var someList = new Observablecollection<ITCardBase>();
someList.CollectionChanged+=Changed;
void Changed(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if(e.Action==System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
if(e.NewItems[0] is ITCardBase)
{
ITCardBase eq = (ITCardBase)e.NewItems[0];
eq.Unsubscribe(TCardClickedInList);
eq.Subscribe(TCardClickedInList);
}
}
}
//this just allows a user control to be clicked and bind to the event
public virtual void Subscribe(Func<ITCardBase, int> myMethodName)
{
TCardClick += myMethodName.Invoke;
}
public virtual void Unsubscribe(Func<ITCardBase, int> myMethodName)
{
TCardClick -= myMethodName.Invoke;
}
public int TCardClickedInList(ITCardBase card)
{
//click event when the user clicks the "card" user control"
return 0;
}
我遇到的问题是,当我清除列表,然后从数据库中重新添加项目时,单击事件会重复,因此它被调用两次,然后是树时间等。因此,清除 SomeList 似乎不会删除其中对象的事件,即使它们应该消失。
如何正确"清除"列表中的项目,以便当它们再次从数据库中添加时(它们是相同的项目),它不会复制此事件。我尝试执行取消订阅(),这不起作用。
编辑:
public void ReloadTCards()
{
if (SubTCardList != null)
{
foreach(ITCardBase card in SubTCardList)
{
card.Unsubscribe(TCardClickedInList);
}//I TRIED unsubscribg each element before I clear the list
//but then when I readd the items to the list, the same issue happens
SubTCardList.Clear();
LoadSubTCardsWithIncidentID(TCardLoadedIncidentId);
}
}
public virtual void Subscribe(Func<ITCardBase, int> myMethodName)
{
TCardClick = null;//THIS FIXED EVERYTHING
TCardClick += myMethodName.Invoke;
}
我只是使事件为空,因为在第二次调用订阅时(当列表再次添加到时),这不是空的,因为它是第一次。