Программный выбор элементов/индексов в ListBox
В WPF я хотел бы установить выбранные индексы System.Windows.Controls.ListBox
Лучший способ, который я нашел до сих пор, - удалить все элементы из элемента управления, вставить выбранный, вызвать SelectAll(), а затем вставить остальные, но это решение не работает в моей ситуации и не очень эффективно.
Итак, как вы выбираете элементы в списке, программно?
Ответы
Ответ 1
Один из способов сделать это - добавить поле Selected в ваш объект данных. Затем вам нужно переопределить стиль по умолчанию listboxitem и привязать свойство isselected к свойству Selected в вашем объекте. Затем вам просто нужно пройти через свои данные и обновить выбранное значение.
Если вы не реализуете это свойство Selected как свойство зависимостей, вам нужно, чтобы ваш класс вложил в интерфейс INotifyPropertyChanged интерфейс и повысил событие propertychanged при установке значения.
Ответ 2
Вы можете установить несколько элементов, выбранных с помощью коллекции SelectedItems. Это не по индексу, а по тому, что вы связали:
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
Ответ 3
Вы должны сделать это:
ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex);
Если itemIndex будет элементом, который вы хотите выбрать.
Если вы хотите выбрать несколько элементов, вам нужно использовать свойство ListBox.SelectedIndexCollection.
Ответ 4
как программно выбирать несколько элементов в списке в wpf
foreach (var boundObject in objectsBoundToListBox)
{
ListBox.SelectedItems.Add(boundObject);
}
Ответ 5
Благодаря 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));
}
Ответ 6
Вы можете сделать это для нескольких разделов:
ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i));
Где я - индекс элемента.