C# 列表更改时的事件
我有一个事件,每当我的列表中的项目发生变化时,它就会被触发。当这个事件被触发时,我调用一个方法来处理这个列表。当列表中有5个新项时,我的方法会被调用5次,但我只需要处理最后一个事件。我怎样才能解决这个问题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
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;
}
}