Поиск в списке данных с помощью текстового поля в wpf - PullRequest
0 голосов
/ 09 января 2012

У меня есть список, куда элементы загружаются из класса (contactclass), я хочу создать текстовое поле, когда пользователь вводит что-либо в текстовом поле, список должен искать начальные символы и отображать их всписок?это мой код

<Window.DataContext>
    <local:AddressBookViewModel  x:Name="ViewModel"/>
</Window.DataContext>

Текстовое поле для поиска

<TextBox  Name="txtNameToSearch" HorizontalAlignment="Right" Height="26" Margin="0,18,68,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="160" BorderThickness="3" Text="{Binding ___No_Name_}" TextChanged="TextBox_TextChanged">

Список

<ListBox  IsTextSearchEnabled="True"   x:Name="___No_Name_" HorizontalAlignment="Left" Margin="37,71,0,47" Width="217" ItemsSource="{Binding Contacts, Mode=TwoWay}" SelectedItem="{Binding SelectedContact,Mode=TwoWay}" Opacity="0.495" DisplayMemberPath="Name" FontFamily="Verdana" FontWeight="Bold" >

Просьба кто-нибудь сказать мне, что я должен делать дальше

1 Ответ

1 голос
/ 09 января 2012

Чтобы справиться с этим, нужно иметь свойство "строка поиска" для вашей модели представления, к которому вы привязываете текст вашего 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 и его возможностей фильтрации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...