Я понял эту проблему.Мне нужно свойство Index, но мне не нужно сортировать ObservableCollection.Я создаю интерфейс, IIndexedObject, с одним свойством, Index.Я реализую этот интерфейс на любом объекте, который необходимо проиндексировать, и в своей таблице базы данных я добавляю столбец индекса.
При загрузке в мою объектную модель я сортирую таблицу базы данных по свойству Index.Это гарантирует, что список загружается в том же порядке, что и при последнем запуске.Я добавляю объекты, используя пустую строку в нижней части DataGrid.Он дает им индекс 0. Я удаляю объекты с помощью кнопки «Удалить», связанной с ICommand в модели представления.
Моя модель представления подписывается на свойство CollectionChanged любой коллекции ObservableCollection, которая содержит IIndexedObjects.При возникновении события модель представления передает коллекцию методу службы ReIndexCollection, который принимает IIndexedObject.Метод повторно индексирует коллекцию, основываясь на ее текущем порядке, путем простой итерации коллекции, присваивая инкрементное целочисленное значение свойству Index каждого элемента.Когда я сохраняю коллекцию обратно в базу данных, значение индекса сохраняется, чтобы гарантировать, что коллекция будет загружена в том же порядке при следующем запуске.
Поскольку единственная необходимая сортировка выполняется в базе данныхзагрузить, нет необходимости сортировать ObservableCollection.Когда я перемещаю элементы в DataGrid, он позаботится о переупорядочении коллекции в это время.Все, что мне нужно сделать, это переиндексировать коллекцию, чтобы ее порядок был сохранен обратно в базу данных.
В целом, это намного проще, чем я ожидал.Одна из причин, по которой мне нравятся WPF и MVVM.