WPF:让列表框保持不变

WPF:让列表框保持不变,wpf,user-interface,listbox,focus,selecteditem,Wpf,User Interface,Listbox,Focus,Selecteditem,在这种情况下,我有一个列表框,它是从一个后台线程填充的,它是一个地址簿,数据来自广告 问题在于,由于列表是使用CollectionViewSource排序的,并且在检索更多数据时用户也可以使用该列表,因此当在列表中的各个位置插入新项目时,它会到处弹跳。因此,它对用户是可用的,但大部分是不可用的,因为用户的选择一直不可见 是否有一种方法可以将焦点保持在所选项目上,并保留所选项目,即使项目从背景线程插入到所选项目的上方和下方?我不喜欢在服务器上排序,我知道这对于广告来说可能是件坏事。我将从UI设计的

在这种情况下,我有一个列表框,它是从一个后台线程填充的,它是一个地址簿,数据来自广告

问题在于,由于列表是使用CollectionViewSource排序的,并且在检索更多数据时用户也可以使用该列表,因此当在列表中的各个位置插入新项目时,它会到处弹跳。因此,它对用户是可用的,但大部分是不可用的,因为用户的选择一直不可见


是否有一种方法可以将焦点保持在所选项目上,并保留所选项目,即使项目从背景线程插入到所选项目的上方和下方?我不喜欢在服务器上排序,我知道这对于广告来说可能是件坏事。

我将从UI设计的角度而不是技术代码的角度对此作出回应。我相信其他人会有办法让列表框保持选中的项目在视图中

我认为,在向列表框中添加大量数据时使用列表框是不可能做到的。让我们假设您确实获得了它,以使选择保持在视图中,那么当用户仍在搜索他们所需的项目时,您将无法将其保持在视图中

首先,如果预期的总加载时间少于10秒,您可以禁用列表框,直到加载完成。显然,通过旋转动画或其他方式使其变灰,以便用户可以看到它正在做什么。我假设你已经放弃了这个选择,否则你可能不会在这里问。但我认为这是值得考虑的。如果加载时间很小,请考虑用户是否能够在加载列表时浏览列表。 其次,我建议您找到一种方法来限制列表框的内容,以便每次只显示少量内容。您可以通过仅显示以字母表中的单个字母开头的名称以及字母选择控件来实现这一点。或者,您可以在顶部提供一个过滤器输入文本框,用户可以在其中键入前几个字母,而列表框将仅显示以这些字母开头的名称。这将允许用户输入sa,列表框将显示sam、samantha、sacha等。现在列表中只有少量项目,因此您不必担心它会跳转。如果由于后台线程上的加载,列表中的项目数量增长过大,并且列表超出了框的高度,则用户只需键入一个额外的字母来进一步过滤列表


很抱歉,如果这不是您真正想要的,但我认为值得提出替代设计,以防您忽略它。

是否可以填充列表,然后开始工作?或者数据可以随时到达?理想情况是,随着更多结果的出现,他们可以处理部分结果。我不想让他们在填充列表框时等待几分钟。谢谢。我确实同意你所说的,但是你个人如何实现一个地址簿呢?想想Exchange地址簿,虽然在这种情况下,它来自于有数十万条条目的广告?类似于Outlook的通讯簿是有意义的。通常从用户界面设计的角度来看,用户必须选择一个字母才能找到名字,这真的很烦人,点击次数越少越好。说到本地化,你真的想从40000+中选择一个日文或中文字符吗?要继续,我确实实现了一个过滤器,但我希望它过滤显示数据。它缓解但不能消除问题。我不希望它返回服务器并导致传输新的数据集。此外,加载时间从15秒到15秒不等,这取决于广告服务器当时的感受。