ListView 間でドラッグドロップして項目を移動するサンプル

昨日のエントリの続きで、今回は ListView です。前回は単一の ListBoxItem を移動するだけでしたが、今回は複数のアイテムを移動する処理を考えてみました。で、色々考えた結果こんな実装になりました。


今回の実装で少し考えさせられたのが、 IDataObject.GetData 系メソッドでどうやって「System.Windows.Controls.SelectedItemCollection」インスタンスを取得するかです。
実は SelectedItemCollection って、プロテクトされてるクラスのためアクセス権がなく、typeof の型引数として与えることができないんですよね。そこで IDataObject.GetData メソッドのパラメータには SelectedItemCollection のフルネームを文字列で渡し、戻り値を IList にキャストして取得するしかないという結論に達しました。
しかし WPF のドラッグドロップに関する情報、国内は非常に少ないです。しばらく苦戦しそうな気配・・・