WPF:listview显示最近添加的项目在顶部而不是底部

我有一个绑定到listview的集合。 此集合每4-5秒添加一次项目,新项目将自动添加到列表视图的底部。 因此,如果你要看到最新的项目,那么你需要向下滚动到底部。

我的问题是:是否有可能想要反转列表视图,以便新的最新项目位于顶部,最旧的项目位于底部?

谢谢

使用Insert而不是Add

 collection.Insert(0, newItem); 

请注意,它比Add慢,因为它必须将所有项目移动1个位置。 如果列表非常大,这可能是一个问题。

正如他们所指出的那样,尽管你已经将其他答案投票接受了,但是这是一个简单的单行解决方案,它会进行大量的转移,这会影响性能。

恕我直言,更好,更正确的方法是使用排序。 很容易获得集合的默认视图,然后对其应用排序,或者只使用CollectionViewSource并在那里应用排序。 当然,这意味着你必须有一个字段要进行排序,但这可能就像添加索引属性一样简单,如果你还没有时间戳或类似的东西。

如果您想要一个代码示例,请告诉我,我将提供一个代码示例。

两种方法:

1)使用CollectionChange事件捕获列表中的任何项目更改。 然后按降序对列表进行排序,然后渲染。

 // subscribe to CollectionChanged event of the ObservableCollection _recordingsHidden.CollectionChanged += RecordingsHiddenOnCollectionChanged; private void RecordingsHiddenOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs) { var view = (CollectionView)CollectionViewSource.GetDefaultView(lvCallHistory.ItemsSource); view.SortDescriptions.Add(new SortDescription("StartTime", ListSortDirection.Descending)); } 

这里’lvCallHistory’是我的列表视图,并根据’StartTime’完成排序。 仅当列表包含较少的项目时,此方法才有效。 因为排序是一项代价高昂的操作,并且如果频繁更新列表,则可能会影响应用程序的性能。 每次呈现视图时,用户可能会经历2-3秒的延迟。

2)避免排序:每次更新列表时,将滚动条指向最后添加的项目。 (优点:非常有效,没有性能问题。缺点:项目仍然添加到列表的末尾,即使滚动条会在新条目出现时将您带到新项目。)

 lvCallHistory.SelectedItem = .Last(); lvCallHistory.ScrollIntoView(lvCallHistory.SelectedItem); 

将排序顺序设置为降序并使用添加项目

 this.listView1.Sorting = System.Windows.Forms.SortOrder.Descending; listView1.Items.Add( listviewitem); 

或删除排序和插入项目

 listView1.Items.Insert(0, listviewitem); 

其中任何一个都可以工作..