WPF:从绑定列表中删除最后一项的最有效方法?
WPF: Most efficient way to remove the last item from a bound list?
在 WPF 应用程序中,我有一个对象列表。
我们会定期在这个列表中添加很多元素(~1-10 items/seconds)。
我们想向这个列表中添加一个 "capacity",以便当我们达到这个容量时,我们删除添加的 "oldest" 项。
此列表将绑定到 WPF UserControl,因此需要 ObservableCollection
或类似列表。
但是,我的理解是 Collection
不保证顺序,所以我不能执行以下操作:
int nbOfElementsToRemove = EventsList.Count - MAX_EVENTS;
if (nbOfElementsToRemove > 0)
{
LoggingEvent[] loggingEvents = EventsList.Take(nbOfElementsToRemove).ToArray();
foreach (LoggingEvent loggingEvent in loggingEvents)
{
EventsList.Remove(loggingEvent);
}
}
因为我可能不会得到最旧的物品。
那么删除必须绑定到 WPF 用户控件的列表中最旧的项目的最有效方法是什么?
一个ObservableCollection
确实是一个有序的集合,所以你通过各种方式删除最旧的应该没有问题。
如果您只是通过 EventsList.Add()
添加项目,那么您可以删除集合中的第一个项目:EventsList.RemoveAt(0)
ObservableCollection 已排序,因此您可以使用索引删除它。
在 WPF 应用程序中,我有一个对象列表。
我们会定期在这个列表中添加很多元素(~1-10 items/seconds)。
我们想向这个列表中添加一个 "capacity",以便当我们达到这个容量时,我们删除添加的 "oldest" 项。
此列表将绑定到 WPF UserControl,因此需要 ObservableCollection
或类似列表。
但是,我的理解是 Collection
不保证顺序,所以我不能执行以下操作:
int nbOfElementsToRemove = EventsList.Count - MAX_EVENTS;
if (nbOfElementsToRemove > 0)
{
LoggingEvent[] loggingEvents = EventsList.Take(nbOfElementsToRemove).ToArray();
foreach (LoggingEvent loggingEvent in loggingEvents)
{
EventsList.Remove(loggingEvent);
}
}
因为我可能不会得到最旧的物品。
那么删除必须绑定到 WPF 用户控件的列表中最旧的项目的最有效方法是什么?
一个ObservableCollection
确实是一个有序的集合,所以你通过各种方式删除最旧的应该没有问题。
如果您只是通过 EventsList.Add()
添加项目,那么您可以删除集合中的第一个项目:EventsList.RemoveAt(0)
ObservableCollection 已排序,因此您可以使用索引删除它。