将项目拖放到同一ListView中

时间:2015-12-28 16:44:54

标签: c# xaml drag-and-drop uwp

我关注ListView

<ListView Name="listAccounts" Width="300" AllowDrop="True" SelectionMode="Single" CanDragItems="True" CanDrag="True" CanReorderItems="True" Background="{ThemeResource myBackground}" DragItemsStarting="listAccounts_DragItemsStarting" Drop="listAccounts_Drop">

并将我的事件处理程序定义为

private void listAccounts_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
    e.Data.SetData("itemIndex", (e.Items[0] as AccountList).Text.ToString());
}

private async void listAccounts_Drop(object sender, DragEventArgs e)
{
    string itemIndexString = await e.Data.GetView().GetTextAsync("itemIndex");
}

我不知道还能做些什么。我想在同一个列表中实现列表项的移动。

1 个答案:

答案 0 :(得分:6)

我查看了正式的Windows 10样本,找了drag-drop sample并将其修剪下来(比如从目标到源删除拖动)。事实证明,您甚至不必处理任何事件以在单个ListView工作中进行重新排序。

<ListView x:Name="TargetListView"
                Grid.Row="2" Grid.Column="1" Margin="8,4"
                CanReorderItems="True" CanDrag="True" AllowDrop="True"
                />

重新排序商品后检查ObservableCollection,您会发现它是正确的。如果您想跟踪重新排序,则必须检查CollectionChanged上的ObservableCollection事件,因为ListView上没有任何事件可以执行此操作。

如果你想支持阻力&amp;在多个列表视图中下降,我想再看看样本。