Мысля об этом старом потоке ... У меня тоже была эта проблема, и да, удаление моих пользовательских переопределений Equals и GetHashCode устранило ее, но, в отличие от цитаты из ответа Джерри, мои методы переопределения Equals и GetHashCode действительно были написаны правильно.
Для меня проблема проявлялась при изменении выбранных данных. Хотя изменение правильно отображалось в ListView, оно оставалось выбранным после этого.
Хотя я не могу найти хорошего объяснения этому, мое личное предположение заключается в том, что код в ListView может предполагать, что данные не изменятся (или, по крайней мере, значение хеша для записи будет не изменяется в зависимости от значения данных) и когда изменяется значение хеш-функции, он не может «найти» запись, чтобы отменить ее выбор). Удаляя пользовательские Equals и GetHashCode, .NET возвращается к более общей версии, которая идентифицирует объект по его ссылке, а не по значениям.
Теперь попробуем DataGrid, чтобы увидеть, работает ли это для меня ...