Как работает ObservableCollection <T>.Move(int, int)?
Я не могу представить это, прочитав документацию для ObservableCollection.Move(int oldIndex, int newIndex) в MSDN:
oldIndex Тип: System.Int32 Индекс с нулевым индексом, определяющий расположение объекта, который нужно переместить. newIndex Тип: System.Int32 нулевой индекс, определяющий новое местоположение элемента.
Я не понимаю, как это работает. Что происходит с элементом newIndex
? Мое предположение состоит в том, что индекс каждого элемента с index >= newIndex
уменьшается. Правильно ли это предположение? И что еще более важно, такое поведение объясняется или описывается где-то на MSDN?
Ответы
Ответ 1
Позвольте мне объяснить поведение Move в форме unit test:
[Test]
public void ObservableTest()
{
var observable = new ObservableCollection<string>{ "A", "B", "C", "D", "E"};
observable.Move(1, 3); // oldIndex < newIndex
// Move "B" to "D" place: "C" and "D" are shifted left
CollectionAssert.AreEqual(new[]{"A", "C", "D", "B", "E"}, observable);
observable.Move(3, 1); // oldIndex > newIndex
// Move "B" to "C" place: "C" and "D" are shifted right
CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable);
observable.Move(1, 1); // oldIndex = newIndex
// Move "B" to "B" place: "nothing" happens
CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable);
}
Ответ 2
Я хотел бы получить простое объяснение:
Объект перемещается в указанное положение, а затем все объекты в коллекции повторно индексируются с нуля и вверх.