使用拖放重新排序ListView中的项目

时间:2014-03-14 15:33:24

标签: wpf windows-store-apps

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

2 个答案:

答案 0 :(得分:3)

这是DragEventArgs.Data的用途。在DragItemsStarting事件中创建拖动项目的DataPackageDataPackage在两个事件之间传递。

编辑:

这样可以在两个ListView之间拖动。根据文档here

&#34;要使用户能够使用拖放式互动重新排序项目,您必须将CanReorderItemsAllowDrop属性设置为true。&#34;

这可以解决您的问题。

答案 1 :(得分:3)

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

虽然文档使用v1 + t*(v2 - v1),但我将其与ListBox

一起使用