2013-04-03 7 views
1

Ma page contient deux éléments ListView, ListA et ListB. Vous pouvez copier des éléments (objets) de ListA à ListB en utilisant un simple glisser-déposer. Pour cela, j'utilise les événements DragItemsStarting et Drop. Cela fonctionne très bien. Vous pouvez maintenant réorganiser les éléments dans ListB. Toutes les propriétés requises sont définies (réorganisation, glisser-déposer) et cela fonctionne également.Réorganiser la listeVoir les éléments: Événement et Glisser/Déposer

Mais maintenant je veux réagir sur le recours, mais je n'ai pas trouvé un événement que je pourrais écouter. J'ai donc pensé qu'il serait possible d'utiliser les événements glisser/déposer sur la même liste pour savoir quand l'utilisateur a changé la position d'un objet. Comment puis-je reconnaître que les éléments de ListB ont été réordonnés?

Mon code (avec le drag and drop approche):

private void ListB_DragItemsStarting(object sender, DragItemsStartingEventArgs e) { 
      var item = ((FeedItem)e.Items[0]); 
      e.Data.RequestedOperation = DataPackageOperation.Move; 
      e.Data.SetDataProvider("FeedItem", request => request.SetData(item)); 
     } 

private async void ListB_Drop(object sender, DragEventArgs e) { 
      DataPackageView view = e.Data.GetView(); 
      if (view.Contains("FeedItem") && view.RequestedOperation == DataPackageOperation.Copy) { 
       //item from ListA 
      } 
      if (view.Contains("FeedItem") && view.RequestedOperation == DataPackageOperation.Move) { 
       //item from ListB 
      } 
     } 

Répondre

1

Ok, problème résolu :)

Pour utiliser le glisser-déposer sur le même élément d'interface utilisateur (dans ce cas un ListView) vous besoin de désactiver l'option CanReorderItems. Ensuite, le code que j'ai fourni ci-dessus fonctionnera.

ListB.CanReorderItems = false; 

Mais lorsque vous souhaitez conserver la possibilité de réorganiser les éléments dans Liste_B (en fait ma première question) vous pouvez vous abonner à l'événement follwoing:

view.VectorChanged += viewVectorChanged; 

... 

private void viewVectorChanged(Windows.Foundation.Collections.IObservableVector<object> sender, Windows.Foundation.Collections.IVectorChangedEventArgs @event) { 

} 

Depuis ma liste est liée à un CollectionViewSource Cela fonctionne bien pour moi. Dans le cas contraire, ListView devrait avoir un événement similaire auquel vous pourriez vous abonner.

+0

intéressant. J'ai un 'ObservableCollection' et je viens de m'abonner à l'événement' CollectionChanging'. Mais j'ai dû laisser 'CanReorderItems = True'. La réponse à ce post a tout: http://stackoverflow.com/questions/16388867/xaml-c-what-event-fires-after-reordering-a-gridview/16446241#16446241 –

Questions connexes