C# 列表更改时的事件

C# 列表更改时的事件,c#,events,event-handling,eventhandler,C#,Events,Event Handling,Eventhandler,我有一个事件,每当我的列表中的项目发生变化时,它就会被触发。当这个事件被触发时,我调用一个方法来处理这个列表。当列表中有5个新项时,我的方法会被调用5次,但我只需要处理最后一个事件。我怎样才能解决这个问题 MyObject.ListItemsChanged += RefreshElementsInUI; 然后在方法中: private void RefreshElementsInUI(object sender, EventArgs e) { var listItems = ge

我有一个事件,每当我的列表中的项目发生变化时,它就会被触发。当这个事件被触发时,我调用一个方法来处理这个列表。当列表中有5个新项时,我的方法会被调用5次,但我只需要处理最后一个事件。我怎样才能解决这个问题

MyObject.ListItemsChanged += RefreshElementsInUI;
然后在方法中:

private void RefreshElementsInUI(object sender, EventArgs e)
{   
    var listItems = getElementsForCommunication(communication);
    ClearElementsInUi();
    foreach ( var element in listItems ) 
         addElementToMyControl(element);
}
如果在我的通信中有5个新项目,ListItemsChanged事件将被触发5次,但我只需要最后一个事件,因为我不必做大约5次相同的工作


希望这会有所帮助

您似乎已经实现了IBindingList或正在使用BindingList。我建议从中派生并定义。批处理模式不是内置于任何事件驱动的.NET集合(BindingList、ObservableCollection)中的,但通过从ObservableCollection派生,然后编写批处理方法AddRange()来实现自己的集合并不困难

公共类MegaList:ObservableCollection
{
//使用集合中的元素初始化Gyrasoft.Common.MegaList的新实例。
公共MegaList(IEnumerable集合)
:base(collection){}
///在批处理模式下添加指定集合的元素,之后触发事件一次
公共MegaList AddRange(IEnumerable集合)
{
foreach(集合中的变量i)
项目.添加(i);
OnCollectionChanged(新建NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
归还这个;
}
}

提供一些代码会很有帮助您现在如何添加到列表中?你是如何举办这些活动的?在我们提供帮助之前,请告诉我们有关您的代码的更多信息。添加了一些我的代码您必须实现
BeginUpdate()
/
EndUpdate()
架构,就像在许多基于集合的控件中所做的那样,将控件重画延迟到调用
EndUpdate()
为止。
public class MegaList<T> : ObservableCollection<T>
{
  // Initialize new instance of Gyrasoft.Common.MegaList<T> with elements from collection. 
  public MegaList(IEnumerable<T> collection)
     : base(collection) { }

  /// Adds the elements of specified collection in batch mode, fire event once after 
  public MegaList<T> AddRange(IEnumerable<T> collection)
  {
     foreach (var i in collection)
        Items.Add(i);

     OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
     return this;
  }
}