28

MSDN の ObservableCollection.Move(int oldIndex, int newIndex)のドキュメントを読んでも、これを理解できないようです:

oldIndex 型: System.Int32 移動する項目の場所を指定する 0 から始まるインデックス。newIndex 型: System.Int32 項目の新しい場所を指定する 0 から始まるインデックス。

仕組みがわかりません。の付いたアイテムはどうなりnewIndexますか? 私の仮定は、各アイテムのインデックスindex >= newIndexがデクリメントされているということです。その仮定は正しいですか?さらに重要なことに、その動作は MSDN のどこかに説明または記述されていますか?

4

3 に答える 3

42

Move単体テストの形式での動作を説明しましょう。

[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);
}
于 2012-05-06T14:33:11.710 に答える
4

私は簡単な説明に行きます:

オブジェクトが指定された位置に移動され、コレクション内のすべてのオブジェクトがゼロから再インデックスされます。

于 2012-05-06T14:22:56.783 に答える