Когда вы «перезагружаете» свою коллекцию, вы в основном заменяете все значения в ней новыми значениями.Даже те, которые выглядят и чувствуют себя идентичными, на самом деле являются новинками.Итак, как вы хотите сослаться на тот же элемент в списке, когда он исчез?Конечно, вы могли бы использовать хак, где вы определяете элемент, который был выбран по его свойствам, и повторно выбираете его (т. Е. Выполняете LINQ-поиск по списку и возвращаете идентификатор соответствующего элемента, а затем повторно выбираете его).Но это определенно не будет использовать лучшие практики.
Вам действительно нужно только обновить вашу коллекцию, то есть удалить недействительные записи и добавить новые записи.Если у вас есть представление, подключенное к вашей коллекции, вся сортировка и выбор и все остальное будет автоматически выполнено за кадром.
Редактировать:
var tmp = this.listBox1.SelectedValue;
this._customers.Clear();
this._customers.Add(item1); this._customers.Add(item2);
this._customers.Add(item3); this._customers.Add(item4);
this.listBox1.SelectedValue = tmp;
в методе, который выполняет сброс /Ясно работает для меня.Т.е. это код, который я вставил в метод обработки событий, вызываемый при нажатии кнопки обновления в моем примере приложения.Таким образом, вам даже не нужно хранить ссылки на объекты клиентов, если вы уверены, что ваш ID является непротиворечивым.Другие вещи, которые я пробовал, такие как перезапись метода коллекций «ClearItems ()» и перезапись «Equals ()» и «GetHashCode ()», не работали - как я и ожидал.