2012-05-06 22 views
19

Me parece que no puede imaginar éste mediante la lectura de la documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN:¿Cómo funciona ObservableCollection <T> .Move (int, int)?

Tipo oldIndex: System.Int32 El índice basado en cero que especifica la ubicación del elemento que desea mover. newIndex Type: System.Int32 El índice basado en cero que especifica la nueva ubicación del elemento.

No entiendo cómo funciona. ¿Qué le sucede al artículo con newIndex? Mi suposición es que el índice de cada artículo con index >= newIndex se reduce. Es esa suposición correcta? Y, lo que es más importante, ¿se explica o describe ese comportamiento en algún lugar de MSDN?

Respuesta

27

Voy a explicar el comportamiento de movimiento en forma de una prueba de unidad:

[Test] 
public void ObservableTest() 
{ 
    var observable = new ObservableCollection<string>{ "A", "B", "C", "D", "E"}; 

    observable.Move(1, 3); // oldIndex < newIndex 
    // Move "B" to "D"'s 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"'s 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"'s place: "nothing" happens 
    CollectionAssert.AreEqual(new[] { "A", "B", "C", "D", "E" }, observable); 
} 
4

me gustaría ir por la sencilla explicación:

El objeto se mueve a la posición indicada, y luego todos los objetos de la colección están re-indexada desde cero y hasta.

+3

No estoy seguro de por qué se vota para arriba. Las otras dos respuestas muestran claramente que la explicación simple correcta es que el elemento se elimina y luego se vuelve a insertar. –

+0

Es obvio que el elemento se quita y se inserta de nuevo, que no necesita una demostración/unidad de prueba compleja. El autor preguntaba por los índices. Mi respuesta, aunque no es la elegida, apunta a ese aspecto. –

+0

Creo que lo único que realmente lo explica bien es el comentario de Ludo anterior. –