2012-05-06 25 views
19

Ben documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN okuyarak bu bir anlamaya görünüyor olamaz:ObservableCollection <T> .Move (int, int) nasıl çalışır?

oldIndex Tipi: öğenin konumunu belirtiyor System.Int32 Sıfır tabanlı dizin Taşınacak. newIndex Tür: System.Int32 Öğenin yeni konumunu belirten sıfır temelli dizin.

Nasıl çalıştığını anlamıyorum. newIndex ile öğeye ne olur? Benim varsayımım, index >= newIndex ile her bir öğenin endeksinin azaltılmış olmasıdır. Bu varsayım doğru mu? Ve daha da önemlisi, davranış, MSDN'de bir yerde açıklanmış mı veya açıklanmış mı?

cevap

27

bana bir birim testinin bir biçimde hareket davranışını açıklayalım:

[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

Basit açıklama için giderdim:

nesne pozisyonuna getirildiğinde belirtilen ve daha sonra koleksiyonundaki tüm nesneler sıfır ve yukarıya yeniden dizine eklenir.

+3

bu oy verilen ediliyor neden emin değilim. Diğer iki cevap açıkça _correct_ basit açıklamasının, öğenin kaldırıldığını ve sonra da geri yerleştirildiğini açıkça gösterir. –

+0

Öğenin çıkarıldığı ve yeniden yerleştirildiği, karmaşık bir gösteri/birim testine ihtiyaç duymadığı açıktır. Yazar dizinleri soruyordu. Cevabım, seçilmiş olan olmamasına rağmen, bu yönü hedefliyor. –

+0

Gerçekten iyi açıklayan tek şey Ludo'nun yukarıdaki yorumu. –