2013-04-03 89 views
1

我的頁面包含兩個ListView元素ListA和ListB。您可以使用簡單的拖放操作將項目(對象)從ListA複製到ListB。爲此,我使用列表'DragItemsStarting下降事件。這工作得很好。現在您可以重新排列ListB中的項目。所有必需的屬性設置(重新排序,拖放),這也適用。重新排序ListView項目:事件和拖放

但現在我想在再整理反應,但我沒有找到一個事件,我可以聽。所以我認爲可以使用同一列表上的拖放事件來了解用戶何時更改了項目的psoition。

那麼我怎麼能認識到ListB的項目已被重新訂購?

我的代碼(用拖放的方法):

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 
      } 
     } 

回答

1

好了,問題就解決了:)

要使用拖放相同的用戶界面元素上落(在這種情況下,一個ListView)你需要禁用CanReorderItems選項。然後我上面提供的代碼將工作。

ListB.CanReorderItems = false; 

但是,當你希望保留重新排序數組listB該項目的選項(其實我原來的問題),您可以訂閱follwoing事件:

view.VectorChanged += viewVectorChanged; 

... 

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

} 

由於我的名單被綁定到一個CollectionViewSource這對我來說很好。否則,ListView應該有一個類似的事件,你可以訂閱。

+0

有意思。我有一個'ObservableCollection',並且只訂閱了'CollectionChanging'事件。但我確實需要離開'CanReorderItems = True'。在這篇文章的答案有這一切:http://stackoverflow.com/questions/16388867/xaml-c-what-event-fires-after-reordering-a-gridview/16446241#16446241 –