2016-04-25 2 views
0

У меня есть CollectionView, связанный с свойством ListView ItemsSource.Получить индекс выбранного элемента CollectionView из базового источника ObservableCollection

Возможно ли получить индекс элемента из коллекции CollectionSource?

CollectionViewSource.GetDefaultView(ObservableCollection); 

Ниже я проиллюстрировал проблему.

Когда выбран элемент C из CollectionView, я хочу получить значение индекса 2, а не 0. Возможно ли это? enter image description here

Любая помощь очень ценится. Благодаря!

ответ

1

Это работает для меня. Предполагается, что, как указывает ваш код, просмотр, который вы фильтруете, является видом по умолчанию для этого ObservableCollection.

var vw = CollectionViewSource.GetDefaultView(MyObservableCollection); 

int index = MyObservableCollection.IndexOf(vw.CurrentItem); 

Конечно, вы можете также связать ListBox.SelectedItemSelectedItem к собственности на вашей ViewModel и принять индекс, который также.

+0

Я связал свойство int с ListBox.SelectedItem, проблема в том, что он дает мне то же значение, что и CollectionView. Ваше решение, безусловно, является вариантом, но не будет ли это по своей сути медленным, если у меня будет много элементов, так как он должен перебирать все элементы, чтобы найти правильный? – HaloMediaz

+1

@HaloMediaz Это правда. Если они отсортированы, вы можете эффективно искать, но это большой «если», конечно. Часто ли меняются предметы? –

+0

Нет. Я вызываю обновление в CollectionView, когда текст текстового поля изменяется, что происходит только тогда, когда пользователь выполняет поиск через это текстовое поле. Мне нужно только получить элемент, когда пользователь выбирает его из окна поиска. Я записал свой экран, о чем я говорю: https://imgur.com/ctgPIQv – HaloMediaz

Смежные вопросы