Я пишу Intellisense / Autocomplete, как тот, который вы найдете в Visual Studio.Все нормально, пока список не содержит, вероятно, более 2000 элементов.
Я использую простой оператор LINQ для выполнения фильтрации:
var filterCollection = from s in listCollection
where s.FilterValue.IndexOf(currentWord,
StringComparison.OrdinalIgnoreCase) >= 0
orderby s.FilterValue
select s;
Затем я назначаю эту коллекцию WPFItemSource Listbox, и на этом все, работает нормально.
Заметим, что Listbox также виртуализирован, поэтому в памяти и в дереве визуальных элементов будет не более 7-8 визуальных элементов.
Однако предостережение в настоящее время заключается в том, что, когда пользователь очень быстро печатает в richtextbox, и при каждом нажатии клавиши я выполняю привязку filtering +, возникает это условие полу-гонки или несинхронной фильтрации, напримерфильтрация первого нажатия клавиш все еще может выполнять свою работу по фильтрации или привязке, в то время как четвертый ход клавиш также делает то же самое.
Я знаю, что могу применить задержку перед применением фильтра, но я пытаюсьчтобы добиться плавной фильтрации, как в Visual Studio.
Я не уверен, в чем именно заключается моя проблема, поэтому я также приписываюПримените его к строковой операции IndexOf, или, возможно, мой список строк можно оптимизировать с помощью какого-либо индекса, что может ускорить поиск.
Любые предложения примеров кода приветствуются.
Спасибо.