自分向けのメモ。
WPF アプリの ListBox(ListView) を複数選択対応にする場合。XAMLとVMだけで完結する
<Window><!--名前空間などは省略-->
<Window.DataContext>
<ViewModel />
</Window.DataContext>
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}"
SelectionMode="Extended">
<!--SelectionMode=Multipleでもよい, Singleだと単一選択になる-->
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Window>
class Item : ObservableObject
{
[ObservableProperty]
bool isSelected;
// 選択状態が変更された場合に何かしたい場合はこれをハンドリングすればよい
//partial void OnIsSelectedChanged( bool value )
//{
//}
}
class ViewModel : ObservableObject
{
// リストボックスのItemsSource にバインドする
public ObservableCollection<Item> Items { get; set; }
// 単一選択の場合の選択アイテム(複数選択した場合は来ない)
[ObservableProperty]
Item selectedItem;
void SelectWork()
{
foreach( var item in Items.Where( i => i.IsSelected ) )
{
// 選択アイテムに対して何かやる
}
}
}