重新排序ListView项目:事件和拖放

时间:2013-04-03 16:17:34

标签: c# windows-runtime

我的页面包含两个ListView元素,ListA和ListB。您可以使用简单的拖放操作将项目(对象)从ListA复制到ListB。为此,我使用列表' DragItemsStarting Drop 事件。这很好用。现在,您可以重新排序ListB中的项目。设置了所有必需的属性(重新排序,拖放),这也适用。

但现在我想对度假做出反应,但我没有找到可以听的事件。所以我认为可以在同一列表中使用拖放事件来了解用户何时更改了项目的位置。

那我怎么能认识到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 个答案:

答案 0 :(得分:1)

好的,问题解决了:)

要在同一个UI元素(在本例中为ListView)上使用拖放,您需要禁用 CanReorderItems 选项。然后我上面提供的代码将起作用。

ListB.CanReorderItems = false;

但是当您希望保留选项以重新排序ListB中的项目(实际上是我原来的问题)时,您可以订阅以下事件:

view.VectorChanged += viewVectorChanged;

...

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

}

由于我的列表绑定到CollectionViewSource,这对我来说很好。否则,ListView应该有一个您可以订阅的类似事件。