#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); }
Комментариев нет:
Отправить комментарий