列表更改时的事件

本文关键字:事件 列表 | 更新日期: 2023-09-27 18:14:39

我有一个事件,每当我的列表中的项目发生变化时,它就会被激发,当这个事件被激发时,我会调用一个方法来处理这个列表。当列表中有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。我建议从ObservableCollection派生并定义OnCollectionChanged。批处理模式不内置于任何事件驱动的.NET集合(BindingList、ObservableCollection(,但通过从ObservableCollections派生,然后编写批处理方法AddRange((来实现自己的集合并不困难。

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;
  }
}