0

我有这种情况,我有一个ListBox从后台线程填充的(它是一个地址簿,数据来自 AD)。

问题在于,由于列表已排序(使用CollectionViewSource)并且在检索更多数据时也可供用户使用,因此随着新项目被插入到列表中的各个位置,它会在整个地方弹跳。所以它对用户可用,但由于用户的选择一直不在视野范围内,因此大多数情况下无法使用。

有没有办法保留Focus选定的项目,并保留选择,即使项目是从后台线程的选择上方和下方插入的?我不想在服务器上进行排序,我知道这对于 AD 来说可能是一件坏事。

4

1 回答 1

0

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

我会争辩说,在向其中添加大量数据的同时使用列表框是不可能做得很好的。假设您确实可以将选择保留在视图中,那么当用户仍在搜索他们所需的项目时,您将无法保持它静止不动。

首先,如果预期的总加载时间低于 10 秒,您可以禁用列表框,直到加载完成。(显然用旋转动画或其他东西将其变灰,以便用户可以看到它正在做某事。)我假设您已经取消了此选项,否则您可能不会在这里询问。但我确实认为这是值得考虑的。如果加载时间非常短,请考虑您的用户是否真的可以通过在列表仍在加载时浏览列表来获得任何收益。

其次,我建议您找到一种方法来限制列表框的内容,以便一次只显示少量。您可以通过仅显示以单个字母开头的名称(以及字母选择控件)来完成此操作。或者您可以在顶部提供一个过滤器条目文本框,用户可以在其中键入前几个字母,并且列表框将仅显示以这些字母开头的名称。这将允许用户键入“sa”,列表框将显示“sam”、“samantha”、“sacha”等。现在列表中只有少量项目,因此您不必担心它跳来跳去。

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

于 2009-09-18T17:37:59.367 回答