Страницы

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

вторник, 31 декабря 2019 г.

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

#c_sharp #wpf #binding


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


Ответы

Ответ 1



Задача решается легко, кроме 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); }

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

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