0

「名前」プロパティを持つ「データ」と言うクラスごとに少なくとも1000個のアイテムを持つListBoxがあります。入力テキストに基づいてリストボックス内のアイテムをフィルタリングするために使用されるリストボックスの上にもテキストボックスがあります。リストボックス内のアイテムをすばやく検索するにはどうすればよいですか。

次のようなことを試してみました: textBox_textChanged イベントで、テキストを取得し、CollectionViewSource クラスを使用して項目を除外しますが、これは非常にぎくしゃくした UI になります。( Data クラスで Name プロパティを取得し、string.Contains() 呼び出しを実行して、項目を除外しています)

検索を高速化する方法はありますか? ありがとう。

4

1 に答える 1

0

私は LINQ を使用して、優れた応答時間で数千をフィルタリングします。

FTSwordFilter はフィルターです。変更されたら、フィルタリングされたリストで NotifgyPropertyChanged を呼び出します。

return FTSwords.Where(ftsWrd => ftsWrd.StemStartsWith(FTSwordFilter));

public Boolean StemStartsWith(string stemStart)
    {
        return (WordStem).StartsWith(stemStart);
    }

StartsWithをContainsに置き換えるだけです

DamerauLevenshteinDistance を使用したファジー フィルタリングのオプションもあります。

バックグラウンド タスクで実行していましたが、フォアグラウンドに移動するのに十分な速さです。

複数の文字を入力できるように、2/10 秒の遅延を追加しました。

于 2012-07-20T12:52:28.173 に答える