【发布时间】:2012-06-08 15:18:31
【问题描述】:
我有一个关于修改绑定到 UI 中的 ListBox 的 ObservableCollection 中的各个项目的问题。
用户界面中的用户可以多选项目,然后将它们放在特定索引处以重新排序。
因此,如果我有项目 {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 方法,
我上面的方法有什么问题以及如何解决? 谢谢!
【问题讨论】:
-
从哪里获得 newDropIndex?
-
我使用一种方法来获取用户当前所在的索引...所以如果用户将鼠标悬停在第 3 项上,则删除索引将为 3...
标签: c# wpf observablecollection