【VB.NET】【WPF】ListBox / ListView で複数の選択項目のインデックスを取得する

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 のデータを(列ヘッダーのクリック等により)ソートできるようにしている場合、上記のコードで取得したインデックス番号が小さい値から大きい値に並んでいるとは限らない。

従って、インデックス順に処理したいようなコードを上記のコードに続けて書く場合は、事前にインデックスをソートしておく必要がある。

購読する
通知を受け取る対象
guest
0 Comments
Inline Feedbacks
View all comments