1

私のページには、ListA と ListB の 2 つの ListView 要素が含まれています。単純なドラッグ アンド ドロップを使用して、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
            }
        }
4

1 に答える 1

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 には、サブスクライブできる同様のイベントが必要です。

于 2013-04-05T14:09:30.407 に答える