3

我尝试使用拖放手势重新排序 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>
4

2 回答 2

5

既然有人已经完成了,为什么还要重新发明轮子。查看 https://github.com/punker76/gong-wpf-dragdrop。它也可作为 NuGet 包使用。

尽管文档使用 a ListBox,但我将其与 a 一起使用ListView

于 2016-09-06T13:18:38.470 回答
4

这是DragEventArgs.Data为了什么。在事件中创建一个DataPackage被拖动的项目。DragItemsStartingDataPackage两个事件之间传递。

编辑:

这使得可以在两个ListViews 之间拖动。根据此处的文档:

“要使用户能够使用拖放交互重新排序项目,您必须将CanReorderItemsAllowDrop属性都设置为 true。”

这应该可以解决您的问题。

于 2014-03-14T16:25:11.430 回答