列表更改时的事件

时间:2014-07-25 08:10:55

标签: c# events event-handling eventhandler

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

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次

希望这会有所帮助

1 个答案:

答案 0 :(得分:1)

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

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