我有一个事件会在我的列表项目发生变化时触发,当这个事件被触发时我会调用一个方法来处理这个列表。当列表中有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次
希望这会有所帮助
答案 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;
}
}