Есть listview. Он забайдин с ObservableCollection<MyObject>. Возможно ли организовать поиск "на лету" по коллекции с выделением найденного? Т.е. есть TextBox с триггером EventName="TextChanged" и при вводе туда символов, в listview отображать подходящие записи. Нашел такой вариант, но мне нужен MVVM.
Задача решается легко, кроме Binding ничего не требуется.
Разметка:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Text="{Binding Pattern, UpdateSourceTrigger=PropertyChanged}"
Margin="5,5,5,0" Padding="3"/>
<ListBox Grid.Row="1" Margin="5"
ItemsSource="{Binding Strings}"
SelectedItem="{Binding Selected}"/>
</Grid>
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<string> Strings { get; }
public MainVM()
{
Strings = new ObservableCollection<string>
{
"Телевизор",
"Телефон",
"Кровать",
"Чемодан",
"Стол",
"Шкаф",
"Чайник"
};
}
protected void Set<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
{
field = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Добавим скролл до выделенного Item.
Подпишемся на событие в разметке:
<ListBox Grid.Row="1" Margin="5"
ItemsSource="{Binding Strings}"
SelectedItem="{Binding Selected}"
SelectionChanged="OnSelectionChanged"/>
Обработчик события в MainWindow.xaml.cs:
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var listBox = sender as ListBox;
listBox.ScrollIntoView(listBox.SelectedItem);
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости