Skip to content

[C# WPF] コードビハインドからListBoxの要素を複数選択する

たまに使うと忘れているので書いておきます。
何も考えずにListBox.SelectedItemを更新してしまうと既に選択してあった項目の選択状態も解除されてしまいます。

例えば、XAMLで以下のようにListBoxを宣言した場合には、

<ListBox x:Name="xListBox" SelectionMode="Multiple">
    <ListBoxItem Content="aaa" IsSelected="True"/>
    <ListBoxItem Content="bbb"/>
    <ListBoxItem Content="ccc"/>
    <ListBoxItem Content="ddd"/>
    <ListBoxItem Content="eee"/>
</ListBox>

コードビハインドでは以下の方法で複数選択ができます。

// その1
xListBox.SelectedItems.Add(xListBox.Items[2]);

// その2
var item = xListBox.Items[3] as ListBoxItem;
item.IsSelected = true;

// その3
// ListBoxの要素がDependencyObjectの場合にはこちらも使えます.
// ListBoxItemはDependencyObjectです.
Selector.SetIsSelected((DependencyObject)xListBox.Items[4], true);

また以下のようにListBox.ItemsSourceにDependencyObject以外のオブジェクトのリストを設定している場合には、その1の方法で設定します。

xListBox.ItemsSource = new List<string> { "aaa", "bbb", "ccc" };

// OK
xListBox.SelectedItems.Add(xListBox.Items[0]);
// NG (自動的にListBoxItemにはならないので、asはnullを返す)
var item = xListBox.Items[1] as ListBoxItem;
// NG (stringはDependencyObjectではないので、castに失敗する)
Selector.SetIsSelected((DependencyObject)xListBox.Items[2], true);

おしまい。

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください