我有一个与修改绑定到 UI 中的 ListBox 的 ObservableCollection 中的各个项目有关的问题。
UI 中的用户可以多选项目,然后将它们放在特定索引处以重新排序。
因此,如果我有项目 {0,1,2,3,4,5,6,7,8,9},用户可以选择项目 2、5、7(按此顺序)并选择将它们放在索引 3 ,所以集合现在变成了,
{ 0,1,3,2,5,7,4,8,9 }
我现在的工作方式就像我控件上的 ondrop() 方法内部一样,我执行以下操作:
foreach (Item item in draggedItems)
{
int oldIndex = collection.IndexOf(item.DataContext as MyItemType);
int newIndex = toDropIndex;
if (newIndex == collection.Count)
{
newIndex--;
}
if (oldIndex != newIndex)
{
collection.Move(oldIndex, newIndex);
}
}
但问题是,如果我将项目放在开始拖动第一个项目的索引之前,则顺序会颠倒......所以集合变成,
{0,1,3, 7, 5, 2 , 4, 8,9}
如果我在索引 3 之后删除它可以正常工作,但如果我在 3 之前删除它,那么顺序就会颠倒。
现在,我可以做一个简单的删除,然后在我想要的索引处插入所有项目,但是“移动”对我来说具有将选择保留在 ui 中的优势(删除基本上取消选择列表中的项目..) ....所以我需要使用 move 方法,
我上面的方法有什么问题以及如何解决?谢谢!