首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表视图将最近添加的项目显示在顶部而不是底部

列表视图将最近添加的项目显示在顶部而不是底部
EN

Stack Overflow用户
提问于 2011-04-20 06:14:12
回答 4查看 10.1K关注 0票数 13

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

我的问题是:是否可以颠倒列表视图,使新的最新项目在顶部,最旧的项目在底部?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-20 06:37:25

使用Insert而不是Add

代码语言:javascript
运行
复制
collection.Insert(0, newItem);

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

票数 26
EN

Stack Overflow用户

发布于 2013-08-31 08:12:32

即使你已经投票接受了另一个答案,正如他们所指出的,虽然这是一个简单的,一行的解决方案,但这会造成大量的变化,这可能会影响性能。

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-09-14 23:52:02

两种方法:

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

代码语言:javascript
运行
复制
// 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)避免排序:每次更新列表时,将滚动条指向最后添加的项目。(优点:非常有效,没有性能问题。缺点:项目仍然添加到列表的末尾,即使滚动条在新条目到来时将您带到新项目。)

代码语言:javascript
运行
复制
lvCallHistory.SelectedItem = <your_collection>.Last();
lvCallHistory.ScrollIntoView(lvCallHistory.SelectedItem);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5723373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档