У меня есть Listview, где источником данных является List<T>, когда содержимое List<T> изменилось, мне нужно обновить Listview и после этого выбрать элемент, который я был выбран ранее, чтобы обновить Listview. Это мой код, который не работает.
if (cbGroups.SelectedIndex!=-1)
{
_GroupSelected = (Groups)cbGroups.SelectedValue;
}
_ItemSource = true;
// Refresh data source with the new records readed.
cbGroups.ItemsSource = Groups_DB.Records;
_ItemSource = false;
if (cbGroups.Items.Count >= 0 && _GroupSelected != null)
{
_ItemSource = true;
cbGroups.SelectedValue = _GroupSelected;
int x = cbGroups.Items.IndexOf(_GroupSelected); // x is always -1
_ItemSource = false;
}
Итак, кто-нибудь может мне помочь?





Кажется очевидным, что старый _GroupSelected предмет не является элементом новой ItemsSource коллекции.
Посмотрите, как свойства SelectValue и SelectedValuePath работают вместе. Затем восстановите выделение, используя соответствующее свойство «ключ» в качестве SelectedValue.
Предполагая, что запись имеет уникальное свойство Id, установите
<ListView x:Name = "cbGroups" SelectedValuePath = "Id" ...>
с таким кодом:
var selectedId = cbGroups.SelectedValue;
cbGroups.ItemsSource = Groups_DB.Records;
cbGroups.SelectedValue = selectedId;