PowerShell-GUIを使ったDrag&Dropで作成したものからいくらか不具合を修正し、Drag&Dropでアイテム順序を移動する部分だけをクラス化したものを作成した。
中心となるプロジェクトはこちら。
Tutorial2022/ReOrder/ReOrder at master · take4blue/Tutorial2022
Contribute to take4blue/Tutorial2022 development by creating an account on GitHub.
Drag&DropでItemsViewのItemsSourceの位置を変更する部分をManualOrderItems<T>に委譲した感じになる。
Xaml側の記述に関して定型化する方法を知らなかったので、そちらはDragGestureRecognizerをべた書きする感じになってしまっている。
操作を行うクラス(ManualOrderItems)は、ItemsSourceで表現するクラスをテンプレート引数にして渡せるようにしており、ItemsSourceのクラスは、操作クラス内でDrag&Drop用の操作が可能にするインターフェース(IHasDragMarker)を用意しておけばいい感じにしている。
操作用オブジェクトはpublicにしておき、初期化時にItemsSourceの内容を渡すようにする。
Xaml側がは操作用オブジェクトの該当するCommandを呼び出すようにする。
前回のソースにはDragOverのイベント処理を入れておいたけど、今回のからは外してある。
必要であれば入れておくといいかも。
UWP側は問題なさそうなのだけど、Androidのシミュレーター越しの操作ではピックするとすぐドラッグ操作が開始されてしまう。実機Androidではロングタップで移動してるので問題なさそうなのだけど。
あとAndroid版で一番上に移動した時、1行目に自動スクロールしないのでアイテムが移動していないように見えてしまうので、注意が必要かも。
コメント