事件未清除

本文关键字:清除 事件 | 更新日期: 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;          
    }

我只是使事件为空,因为在第二次调用订阅时(当列表再次添加到时),这不是空的,因为它是第一次。