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 已排序,因此您可以使用索引删除它。