Страницы

Поиск по вопросам

понедельник, 24 декабря 2018 г.

WPF MVVM: поиск и scroll в listview

Есть listview. Он забайдин с ObservableCollection. Возможно ли организовать поиск "на лету" по коллекции с выделением найденного? Т.е. есть TextBox с триггером EventName="TextChanged" и при вводе туда символов, в listview отображать подходящие записи. Нашел такой вариант, но мне нужен MVVM.


Ответ

Задача решается легко, кроме Binding ничего не требуется. Разметка:



ViewModel:
class MainVM : INotifyPropertyChanged { string _pattern; public string Pattern { get => _pattern; set { Set(ref _pattern, value); Selected = Strings.FirstOrDefault(s => s.StartsWith(Pattern)); } }
string _selected; public string Selected { get => _selected; set => Set(ref _selected, value); }
public ObservableCollection Strings { get; }
public MainVM() { Strings = new ObservableCollection { "Телевизор", "Телефон", "Кровать", "Чемодан", "Стол", "Шкаф", "Чайник" }; }
protected void Set(ref T field, T value, [CallerMemberName] string propertyName = "") { field = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
public event PropertyChangedEventHandler PropertyChanged; }


Добавим скролл до выделенного Item. Подпишемся на событие в разметке:

Обработчик события в MainWindow.xaml.cs
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { var listBox = sender as ListBox; listBox.ScrollIntoView(listBox.SelectedItem); }

Комментариев нет:

Отправить комментарий