我尝试使用拖放手势重新排序ListView中的项目。
In the "Drop" method I don't know how to get a reference to the "dropped" element, I only get reference to the "target drop" element.
见下文:
private void Grid_Drop(object sender, DragEventArgs e)
{
ReorderItem draggedElement = (e.OriginalSource as Grid).DataContext as ReorderItem;
ReorderItem targetElement = ((Grid)sender).DataContext as ReorderItem;
Debug.WriteLine("Dragged element is:" + draggedElement.Index);
Debug.WriteLine("Drag target element is:" + targetElement.Index);
}
重新排序介于0到1之间。控制台索引都是1 :(
<ListView ItemsSource="{Binding Items}" CanReorderItems="True">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Background="{Binding Color}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
AllowDrop="True"
Drop="Grid_Drop">
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
答案 0 :(得分:3)
这是DragEventArgs.Data
的用途。在DragItemsStarting
事件中创建拖动项目的DataPackage
。 DataPackage
在两个事件之间传递。
编辑:
这样可以在两个ListView
之间拖动。根据文档here:
&#34;要使用户能够使用拖放式互动重新排序项目,您必须将CanReorderItems
和AllowDrop
属性设置为true。&#34;
这可以解决您的问题。
答案 1 :(得分:3)
为什么有人已经完成轮子时重新发明轮子。查看 https://github.com/punker76/gong-wpf-dragdrop。它也可以作为NuGet包使用。
虽然文档使用v1 + t*(v2 - v1)
,但我将其与ListBox