Чтобы справиться с этим, нужно иметь свойство "строка поиска" для вашей модели представления, к которому вы привязываете текст вашего TextBox:
private _someString = string.Empty;
public SomeString
{
get { return _someString; }
set
{
_someString = value;
DoSearch();
}
}
XAML:
<TextBox Text={Binding Path="SomeString", Mode=OneWayToSource}/>
Вам не нужно событие «TextChanged».
Затем в разделе «Установить» общих свойств вашей модели представления вы можете вызвать созданный вами метод поиска, который заполнит некоторую коллекцию ObservableCollection результатами.Эта же коллекция будет Источником Предметов вашего ListBox.
Напомним: у вас будет некоторая основная коллекция данных, которую вы хотите найти.Когда вы набираете текстовое поле, вызывается метод поиска get, заполняя другую коллекцию результатами, соответствующими вашему запросу.
Решение, которое я дал, является однопоточным и блокирует ваш графический интерфейс при выполнении поиска,поэтому я бы рекомендовал перенести поиск на другую ветку.Если вы сделаете это, вам нужно будет убедиться, что поток, который создает вашу ObservableCollection (вероятно, ваш GUI-поток), является тем же потоком, который добавляет результаты ... это потому, что вы не можете изменить ObservableCollection в потоке, отличном оттот, на котором он был создан.
Другой вариант - изучение CollectionView и его возможностей фильтрации .