0

解決方法がわからないという問題があります...リストボックスに多くの項目が含まれている可能性があります。

ユーザーがアイテムを選択すると、非同期呼び出しを行い、データを取得して画面に入力します。ユーザーは下矢印キーまたは上矢印キーを押してアイテム間を移動できます。問題は、ユーザーが下矢印キーを押したままにすると、選択がすばやく変更され、アプリケーションで問題が発生することです....きれいな方法はありますかユーザーがダウンキーをしばらく押し続けたことを検出し、ビューの更新を一時停止し、ユーザーが離した後にのみ更新しますか?

説明がわかりにくかったらすいません、

4

2 に答える 2

1

非同期にしようとしていますか...

  1. ...リストボックスに入力するコレクションを更新する、または...
  2. ...リストボックスで現在選択されているアイテムに基づいて別のビューを更新しますか?

私は#2を推測しています.別のビューを更新するために多くの非同期呼び出しを開始すると、問題が発生します. @Ramhoundが指摘しているように、ボタンを押したままにして選択をすばやく変更することと、同じボタンをすばやくタップすること(または、韓国の血統戦争のプロゲーマーとしてクリックするだけ)との間に違いはありません。両方を修正するには、次の操作を実行できます。

  1. 選択が変更されたときにリセットするタイマーを設定します。非同期クエリは、タイムアウト後にのみ開始してください。これにより、非常に急激な選択の変更が除外されます。
  2. 一度に実行中のクエリが 1 つだけであることを確認してください。そのため、新しい非同期呼び出しを開始する前に、前のクエリをキャンセルしてクリーンアップしてください。

このようにして、ユーザーは選択内容で何でもできますが、実際に何かを選択した場合にのみ更新します。タイミングを微調整して、UI がまだきびきびしていることを確認してください :)

于 2013-02-06T08:31:46.967 に答える
0

コントロールがフォーカス可能な場合、 UIElement.OnKeyDownをオーバーライドできます

したがって、この場合、基本的にリストボックスのサブクラスを作成し、OnKeyDown 関数をオーバーライドすることを意味します。このように捉えることもできますが、そうすると事態はさらに厄介になります。

または、 Keyboard.GetKeyStatesを使用してキーの状態を照会することもできます。

私見ですが、データをプリロードするだけです。ListBoxes は、必要のない情報を表示しないほどスマートな「仮想化スタック パネル」を使用します。

于 2013-02-05T19:03:45.693 に答える