我正在尝试对 ObjectListView 实现重新排序的拖放功能。考虑以下类:
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
Name = name;
}
}
我得到了重新排序工作(但是它非常非常难看),但我似乎无法找出我应该如何重新排序我List<MyClass>
的 OLV 显示的内容?我尝试在 OLV 选定索引的位置删除 MyClass 对象,并在新位置插入,但这不起作用。
如果你需要它,这里是我用来让视图拖放工作的代码:
private void objectListView1_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(((OLVListItem)e.Item).RowObject, DragDropEffects.Move);
}
private void objectListView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.Data.GetDataPresent("Cheeseburger.MyClass") ? DragDropEffects.Move : DragDropEffects.None;
}
private void objectListView1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
var olv = (sender as ObjectListView);
if(e.Data.GetDataPresent("Cheeseburger.MyClass"))
{
var pt = olv.PointToClient(new Point(e.X, e.Y));
var index = olv.InsertionMark.NearestIndex(pt);
// Debugging
Text = index.ToString();
var node = olv.GetItem(index);
if (node != null && index != -1)
{
node.EnsureVisible();
}
}
}
private void objectListView1_DragDrop(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
var olv = (sender as ObjectListView);
if (e.Data.GetDataPresent("Cheeseburger.MyClass"))
{
var draggedObject = e.Data.GetData("Cheeseburger.MyClass") as MyClass;
var pt = olv.PointToClient(new Point(e.X, e.Y));
var index = olv.InsertionMark.NearestIndex(pt);
var node = olv.GetItem(index);
if (node != null && index != -1)
{
var models = new List<MyClass>() { draggedObject };
olv.MoveObjects(index + 1, models);
}
}
}
如果我的问题缺少任何信息,请告诉我 - 谢谢!