web-dev-qa-db-ja.com

リストボックスでアイテム/インデックスをプログラムで選択する

WPFで、System.Windows.Controls.ListBoxの選択したインデックスを設定したい

これまでに見つけた最善の方法は、コントロールからすべてのアイテムを削除し、選択したものを挿入し、SelectAll()を呼び出してから残りを挿入することですが、このソリューションは私の状況では機能せず、非常に効率的でもありません。

では、プログラムでリストボックス内のアイテムを選択するように設定するにはどうすればよいでしょうか。

15
Alex

これを行う1つの方法は、Selectedフィールドをデータオブジェクトに追加することです。次に、デフォルトのlistboxitemスタイルを上書きし、isselectedプロパティをオブジェクトのSelectedプロパティにバインドする必要があります。次に、データ項目を調べて、選択した値を更新する必要があります。

そのSelectedプロパティを依存関係プロパティとして実装しない場合は、クラスでINotifyPropertyChangedインターフェイスを強制し、値を設定するときにpropertychangedイベントを発生させる必要があります。

10
mdm20

SelectedItemsコレクションを使用して、選択した複数のアイテムを設定できます。これはインデックスによるものではなく、バインドしたものによるものです。

foreach (var boundObject in objectsBoundToListBox)
{
    ListBox.SelectedItems.Add(boundObject);
}
33
danlash

あなたはこれをしなければなりません:

ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex);

ItemIndexは、選択するアイテムです。複数のアイテムを選択する場合は、ListBox.SelectedIndexCollectionプロパティを使用する必要があります。

3
jgallant

wpfのリストボックスで複数のアイテムをプログラムで選択する方法

foreach (var boundObject in objectsBoundToListBox)
{
    ListBox.SelectedItems.Add(boundObject);
}
1
Buzz

これは、複数のセクションに対して実行できます。

ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));

ここで、iはアイテムインデックスです。

1
user3878444

Mdm20に感謝します。私の場合、実際にはCheckBox内のListBoxをチェックしていましたが、この依存関係プロパティは魅力のように機能しました。 DependencyObjectからカスタムクラスを継承し、プロパティを実装する必要がありました

public class ProjectListItem : DependencyObject{ 

    public Boolean IsChecked
    {
        get { return (Boolean)this.GetValue(CheckedProperty); }
        set { this.SetValue(CheckedProperty, value); }
    }
    public static readonly DependencyProperty CheckedProperty =
        DependencyProperty.Register("IsChecked", typeof(Boolean), typeof(ProjectListItem), 
                                    new PropertyMetadata(false));
}