今回はドラッグ&ドロップしたファイルやフォルダ(パス)の一覧を取得する
ビヘイビアを作成します。

※ビヘイビアを使用するためのインストール手順はこちらです。

ドラッグ&ドロップを行うビヘイビアクラス:PathsDragAndDropBehaviorを作成し
ベースクラスとして下記を参照します。
・System.Windows.Interactivity.Behavior<T>

<T>とはジェネリッククラスのことなので、用途に見合った型を指定する必要がありますが
今回はWindow、Page、UserControlなどなど、使用元となる型(クラス)を問わず
使用したいので、ほとんどのコントールが継承している下記を指定します。
・System.Windows.FrameworkElement

まずドラッグ&ドロップしたパス一覧を保存する
System.Collections.IListのプロパティ:DropFilesを作成します。

また、Binding可能なプロパティとするため
System.Windows.DependencyProperty:DropFilesPropertyも作成し
DropFilesはDropFilesPropertyを参照するようにします。


次にドラッグイベント:OnPreviewDragOver()メソッドと
ドロップイベント:OnDrop()メソッドを実装します。

ドラッグイベントではドラッグデータがファイルデータであるかチェックを行い
ドロップイベントにてDropFilesにドラッグデータ一覧をセットします。

最後にOnAttached()、OnDetaching()各メソッドにてイベント登録、解除を行えば
ビヘイビアの完成です。



作成したビヘイビアを使って、<ListBox>にドラッグ&ドロップした
パス一覧を表示してみます。

ViewModelではパス一覧用プロパティ:Pathsを作成します。
ドラッグ&ドロップにてプロパティ変更イベントを実行するように
set内にてCallPropertyChanged()を実行します。


ViewにてXML名前空間にViewModelの名前空間を登録し
<Window.DataContext>にViewModelの参照を追加します。

また、ビヘイビアを使用するためXML名前空間に以下2つを登録します。
・xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
・xmlns:b="clr-namespace:【作成したビヘイビアの名前空間】"

登録後、パス一覧を表示する<ListBox>を作成し、PathsをBindingします。
また、ドラッグ&ドロップ処理を許可するAllowDropをTrueに設定します。
※AllowDropはドラッグ&ドロップする際に必須の設定です。

最後に<ListBox>内に<i:Interaction.Behaviors><PathsDragAndDropBehavior />を追加し
DropFilesにPathsをBinding、ModeをOneWayToSourceに設定します。
※ModeをOneWayToSourceにしないとViewModelにパス一覧がセットされません。



プログラムの動作を確認してみます。

ファイルをいくつか選択してドラッグ&ドロップを実行すると
01-min

選択したファイルの一覧が表示されました。
02-min