我在不同的ListView之间遇到拖拽问题。我有一个GridView,它包含多个来自同一个ObservableCollection的ListView。基本上,我希望能够将项目从一个ListView拖动到另一个Listview,但在同一个GridView中。
下面是ListView,它是GridView的DataTemplate的一部分。 ListView绑定到一个ObservableCollection字符串。这也是GridView绑定的Property或ObservableCollection。
<ListView Name="ListingView" Height="200" HorizontalAlignment="Center" Grid.Row="1" CanDragItems="True" AllowDrop="True"
DragItemsStarting="ListView_DragItemsStarting"
DragOver="ListView_DragOver"
CanReorderItems="True"
DragItemsCompleted="ListView_DragItemsCompleted"
Drop="ListView_Drop" ItemsSource="{Binding Listing}"
/>
这是ListView的代码隐藏
private void ListView_DragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
var item = string.Join(",", e.Items.Cast<string>());
e.Data.SetText(item);
e.Data.RequestedOperation = DataPackageOperation.Move;
}
private void ListView_DragOver(object sender, DragEventArgs e)
{
if (e.DataView.Contains(StandardDataFormats.Text))
{
e.AcceptedOperation = DataPackageOperation.Move;
}
}
private async void ListView_Drop(object sender, DragEventArgs e)
{
if (e.DataView.Contains(StandardDataFormats.Text))
{
var item = await e.DataView.GetTextAsync();
var destinationListView = sender as ListView;
var listViewItemsSource = destinationListView?.ItemsSource as ObservableCollection<string>;
if (listViewItemsSource != null)
{
listViewItemsSource.Add(item);
}
}
}
private void ListView_DragItemsCompleted(ListViewBase sender, DragItemsCompletedEventArgs args)
{
var item = string.Join(",", args.Items.Cast<string>());
var destinationListView = sender as ListView;
var listViewItemsSource = destinationListView?.ItemsSource as ObservableCollection<string>;
listViewItemsSource.Remove(item);
}
}
我遇到的问题是如果我将所有项目拖出ListView,就会找到阻止ListView变为完全空的方法。一旦ListView变空,我就无法返回并将一些内容拖入其中。
第二个问题是,当我拖动一个项目然后在同一个ListView中放开它时,它被拖动然后删除并且不重新添加该项目。 我想我需要在DragItemCompleted方法中添加一个If语句,以便在删除项目之前查看源是否与目标相同。
编辑我似乎已修复&#34;从listView中删除CanReorderItemsProperty的第二个问题。我不确定为什么,但似乎已经解决了这个问题。但现在我无法重新排序列表:(
答案 0 :(得分:0)