ListBoxでプログラムでアイテム/インデックスを選択する
質問
WPFで、System.Windows.Controls.ListBoxの選択されたインデックスを設定したい
これまでのところ、コントロールからすべてのアイテムを削除し、選択したものを挿入し、SelectAll()を呼び出し、残りを挿入するのが最善の方法です。しかし、このソリューションは私の状況では機能せず、非常に効率的でもありません/ p>
では、リストボックス内のアイテムをプログラムで選択するにはどうすればよいですか
解決
これを行う1つの方法は、選択したフィールドをデータオブジェクトに追加することです。次に、デフォルトのlistboxitemスタイルをオーバーライドし、isselectedプロパティをオブジェクトのSelectedプロパティにバインドする必要があります。次に、データ項目を調べて、選択した値を更新するだけです。
そのSelectedプロパティを依存関係プロパティとして実装しない場合、クラスでINotifyPropertyChangedインターフェイスを実装し、値を設定するときにpropertychangedイベントを発生させる必要があります。
他のヒント
SelectedItemsコレクションを使用して、複数のアイテムを選択済みとして設定できます。これはインデックスによるものではなく、バインドしたものによるものです。
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
wpfのリストボックスで複数のアイテムをプログラムで選択する方法
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
これを行う必要があります:
ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex);
itemIndexは、選択するアイテムです。 複数のアイテムを選択する場合は、ListBox.SelectedIndexCollectionプロパティを使用する必要があります。
mdm20に感謝します。
私の場合、実際には ListBox
内の CheckBox
をチェックしていましたが、このDependencyプロパティは魅力のように機能しました。
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));
}
複数のセクションに対してこれを行うことができます:
ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));
iはアイテムインデックスです。