Прежде всего, ваш счетчик записей на самом деле ничем не отличается от ListView от wpf, поскольку он использует VirtualizingStackPanel.
Помимо точного решения PropertyChange Notification, вам также следует рассмотреть концепцию отложенного исполнения . Похоже, вы конвертируете все в список, что сразу приведет к принудительному перечислению набора результатов.
Давайте рассмотрим ваш код:
_people= GetAll().ToList();
//The result of GetAll is enumerated and a solid list is created
List<Person> allPeople = (from person in _people
select new PersonViewModel(person)).ToList();
// another list created
AllPeople = new ObservableCollection<PersonViewModel>(allPeople);
// ObservableCollection created out of list
Давайте немного подправим:
_people= GetAll(); // The result is just referred by _people
IEnumerable<Person> allPeople = (from person in _people
select new PersonViewModel(person));
// IEnumerable is just provided with a query. No other operation is done
AllPeople = new ObservableCollection<PersonViewModel>(allPeople);
// The ObservableCollection requests element from allPeople
// which in turn requests from the query
// which in turn requests from _people
// which enumerates the result of GetAll() and yields the result.
Следовательно, вы можете избежать создания временных списков.
Кроме того, даже метод GetAll()
можно сделать так, чтобы он возвращал IEnumerable, если он этого не делает.
Вы можете взглянуть на
IEnumerable
IQueryable
доходность