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