多个ListView之间的UWP拖放

时间:2016-05-02 01:36:51

标签: c# xaml win-universal-app

我在不同的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的第二个问题。我不确定为什么,但似乎已经解决了这个问题。但现在我无法重新排序列表:(

1 个答案:

答案 0 :(得分:0)