2016-05-02 91 views
0

異なるリストビュー間のドラッグアンドドロップに問題があります。私は同じObservableCollectionから複数のListViewをすべて含むGridViewを持っています。基本的には、あるListViewから別のListViewにアイテムをドラッグできますが、同じGridView内にアイテムをドラッグできます。UWP複数のリストビュー間のドラッグアンドドロップ

以下は、GridViewのDataTemplateの一部であるListViewです。 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が空になったら、私は戻って何かにドラッグすることはできません。

2番目の問題は、アイテムをドラッグしてから同じListViewで削除した後、ドラッグしてアイテムを削除してアイテムを再度追加しないときです。 アイテムを削除する前に、ソースがターゲットと同じかどうかを確認するには、If文をDragItemCompletedメソッドに追加する必要があると思います。

編集私は、リストビューからCanReorderItemsPropertyを削除することで2番目の問題を修正したようです。なぜそれが修正されたのかはわかりませんが、リストを並べ替えることはできません。このWindowsのサンプル・プログラムに

+0

ソリューション: - カウントが1あなたはCanReorderItemsPropertyを削除するべきではありません – Archana

+0

何を行ういけないビュー内の真の、項目ができた場合であればListView_DragItemsStartingでカウントリストビュー項目を確認してください。ユーザインタラクションによって並べ替えられます。そうでない場合はfalseです。デフォルトはfalseです。 – Archana

+0

固定された問題1つを感謝し、問題2への解決策をほとんど見つけた –

答えて

関連する問題