0

我有一个不知道如何解决的问题...我有一个可能包含很多项目的列表框。

当用户选择一个项目时,我会进行异步调用并获取一些数据并填充屏幕。用户可以按向下箭头键或向上箭头键在项目之间导航,问题是当用户按住向下箭头键时,选择变化很快,我的应用程序遇到问题....有没有干净的方法检测到用户按住向下键一段时间,暂停更新视图,并仅在他释放后更新它?

如果我解释不清楚,我很抱歉,

4

2 回答 2

1

您是否尝试异步...

  1. ...更新填充列表框的集合,或者...
  2. ...根据列表框中当前选定的项目更新单独的视图?

我猜是#2,当你开始大量异步调用来更新单独的视图时,你会遇到问题。正如@Ramhound 指出的那样,通过按住按钮和快速点击相同的按钮(或者只是作为韩国育雏战职业玩家点击离开)来快速更改选择没有区别。要解决这两个问题,您可以执行以下操作:

  1. 设置一个您在选择更改时重置的计时器。仅在超时后才启动异步查询。这将过滤掉非常快速的选择更改。
  2. 确保一次只有一个正在进行的查询,因此在开始新的异步调用之前,请取消并清理前一个。

这样用户可以对选择做任何事情,你仍然只有在她实际选择了一些东西后才更新。调整时间以确保 UI 仍然活泼 :)

于 2013-02-06T08:31:46.967 回答
0

如果控件是可聚焦的,您可以覆盖 UIElement.OnKeyDown

所以在这种情况下,这实际上意味着创建列表框的子类,然后覆盖 OnKeyDown 函数。您可以通过这种方式捕捉到它,但这会使事情变得更加混乱。

或者您可以使用Keyboard.GetKeyStates查询键状态。

恕我直言,您应该只预加载数据。ListBoxes 使用“虚拟化堆栈面板”,它足够智能,不会显示不需要的信息。

于 2013-02-05T19:03:45.693 回答