Программный выбор элементов/индексов в 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));

Где я - индекс элемента.