首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ObservableCollection<T>.Move(int,int)是如何工作的?

ObservableCollection<T>.Move(int,int)是如何工作的?
EN

Stack Overflow用户
提问于 2012-05-06 22:18:31
回答 3查看 10.3K关注 0票数 27

我似乎不能通过阅读documentation for ObservableCollection.Move(int oldIndex, int newIndex) on MSDN来解决这个问题

oldIndex类型: System.Int32指定要移动的项的位置的从零开始的索引。newIndex类型: System.Int32指定项的新位置的从零开始的索引。

我不明白它是怎么工作的。使用newIndex时,项目会发生什么情况?我的假设是使用index >= newIndex的每一项的索引都是递减的。这个假设是正确的吗?更重要的是,这种行为在MSDN上有解释或描述吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-06 22:33:12

让我以单元测试的形式解释一下Move的行为:

代码语言:javascript
复制
[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);
}
票数 41
EN

Stack Overflow用户

发布于 2012-05-06 22:22:57

我想要一个简单的解释:

对象被移动到指定的位置,然后集合中的所有对象都从零开始向上重新索引。

票数 4
EN

Stack Overflow用户

发布于 2018-07-11 18:41:03

除了@nemesv的伟大answer之外,帮助我记住这种行为的是myObservableCollection.Move(oldIndex, newIndex)相当于:

代码语言:javascript
复制
var movedItem = myObservableCollection[oldIndex];
myObservableCollection.RemoveAt(oldIndex);
myObservableCollection.Insert(newIndex, movedItem);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10471222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档