WPF - Drag&删除ListBox中的多个项目

时间:2016-06-15 18:58:59

标签: c# wpf drag-and-drop listbox

我有一个实现拖放的ListBox drop:它适用于单个项目(选择一个项目,然后将其拖到另一个项目的顶部将把它放在正确的位置),但是当选择多个项目时(使用shift或ctrl)我无法使其工作。

我的主要问题是我不知道DragDrop.DoDragDrop函数如何处理批量项目。它适用于单个项目(指定FrameworkElement,然后指定数据格式和数据,最后指定拖动效果)。但如果我有多个项目,我该如何使用DoDragDrop?既然我必须指定一种格式,它是否总是期望该格式的单个实例?我有几个'实体'我想拖放,如何告诉DragDrop.DoDragDrop在一次操作中接受所有数据?

当我只将一个DataObject传递给DoDragDrop方法时,它非常有效,但我需要找到一种方法在一次调用中传递多个对象。

到目前为止,我已尝试创建多个DataObjects并尝试创建一个数组或列表以添加到DoDragDrop作为其数据,但这不起作用。我也尝试循环DoDragDrop,因此对于我拖动的每个项目都会调用一次,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。对于数据,我传递了一个我需要拖动的对象列表,当处理拖放时,我会以列表的形式接收数据然后执行我需要做的事情。

我遇到的问题是我无法理解不仅仅属于一个数据对象的“格式”概念。对于格式我只需要

DragDrop.DoDragDrop((FrameworkElement)sender, new DataObject("System.Collections.Generic.List<object>", _dragSources.Select(x => x.DataContext).ToList()), DragDropEffects.Copy);

一切顺利。即使在MSDN文档中,也没有提到“格式”部分实际上只是一个关键。您可以输入任何字面上的内容,只要它与您用于获取数据的内容相匹配(在本例中为e.Data.GetData("System.Collections.Generic.List<object>") as List<object>;),那么您就是黄金。