Реализация «Поиск по мере ввода» в Silverlight - PullRequest
3 голосов
/ 19 января 2011

Я пытаюсь реализовать поиск при вводе экрана в моем приложении Silverlight.Идея в том, что у меня есть экран с элементом управления textedit и списком.Список заполнен всеми моими данными.

Когда пользователь вводит что-то в текстовое поле, происходит следующее:

  • Все элементы, которые не содержат все буквы из пользовательского вводаскрыты
  • Соответствующие буквы видимых элементов списка выделены другим цветом.

Я не уверен, как начать с этого, поэтому все указатели, образцы и подсказки приветствуются!

Ответы [ 2 ]

7 голосов
/ 20 января 2011

Я бы предложил использовать CollectionViewSource.CollectionViewSource имеет возможность фильтровать элементы.Вы можете привязать свой ListBox к CollectionViewSource и обработать событие Filter, чтобы выполнить фильтрацию.Свяжите свое «Поле поиска» со свойством Text, которое вы можете использовать в событии Filter.Вы можете обработать событие KeyUp элемента управления TextBox, чтобы запустить фильтрацию, вызвав метод Refresh в представлении CollectionViewSource.

Фильтрация данных с использованием CollectionViewSource: http://xamlcoder.com/blog/2010/10/27/filtering-data-using-collectionviewsource/

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource.filter.aspx

http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx

http://timheuer.com/blog/archive/2009/11/04/updated-silverlight-3-datagrid-grouping-data-pagedcollectionview.aspx

http://bea.stollnitz.com/blog/?p=392

Код Sudo:

// ViewModel - properties should fire NotifyPropertyChanged
public class ViewModel : INotifyPropertyChanged
{
  public ViewModel
  {
    this.Data = new CollectionViewSource();
    this.Data.Source = this.GenerateObjects();
    this.Data.Filter += (s,e) =>
    {
      // TODO: add filter logic
      DataObject item = e.Item as DataObject;
      return item.Name.Contains(this.SearchText);
    };
  }
  public string SearchText{get;set;}
  public CollectionViewSource Data {get;set;}

  private List<DataObject> GenerateObjects(){ // generate list of data objects }
}

// View XAML
<StackPanel>
  <TextBox Text="{Binding SearchText, Mode=TwoWay}" KeyUp="OnKeyUp"/>

  <ListBox ItemsSource="{Binding Data.View}"/>
</StackPanel>


// View Code Behind
public class View : UserControl
{
  public View() { this.DataContext = new ViewModel(); }

  private ViewModel ViewModel { get { return this.DataContext as ViewModel; } }

  private OnKeyUp()
  {
    this.ViewModel.Data.View.Refresh();
  }
}
3 голосов
/ 19 января 2011

Вы можете начать с AutocompleteBox из Silverlight Toolkit .

У него есть несколько удобных точек, где вы сможете расширить его функциональность, например, в случае поиска в вашем пуле значений.

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