我有一个事件,每当我的列表中的项目发生变化时,它就会被激发,当这个事件被激发时,我会调用一个方法来处理这个列表。当列表中有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;
}
}