WPF の ListBox / ListView の場合、選択されている項目が1つのときは、そのインデックスを取得するための .SelectedIndex という分かりやすいプロパティがある。
では複数の項目が選択されているときはどうするか?
Forms の ListBox / ListView であれば .SelectedIndices というプロパティがあるのだが、WPF の ListBox / ListView にはそれが無いので、下記のようにする。
Dim indexList As New List(Of Integer) For Each item In oListView.SelectedItems Dim idx As Integer = oListView.Items.IndexOf(item) indexList.Add(idx) Next indexList.Sort 'インデックスをソート
インデックスをソートしている理由
ListView の ItemsSource に ObservableCollection 型のリストをバインドして、ListView のデータを(列ヘッダーのクリック等により)ソートできるようにしている場合、上記のコードで取得したインデックス番号が小さい値から大きい値に並んでいるとは限らない。
従って、インデックス順に処理したいようなコードを上記のコードに続けて書く場合は、事前にインデックスをソートしておく必要がある。