Программный выбор элементов / индексов в ListBox - PullRequest
14 голосов
/ 06 мая 2009

В WPF я хотел бы установить выбранные индексы System.Windows.Controls.ListBox

Лучший способ, который я нашел до сих пор, - это удалить все элементы из элемента управления, вставить выбранные, вызвать SelectAll (), а затем вставить остальные, но это решение не работает ни в моей ситуации, ни очень эффективно.

Итак, как установить элементы в списке для выбора программным способом?

Ответы [ 6 ]

27 голосов
/ 11 июня 2009

Вы можете установить несколько выбранных элементов, используя коллекцию SelectedItems. Это не по индексу, а по тому, что вы связали:

foreach (var boundObject in objectsBoundToListBox)
{
    ListBox.SelectedItems.Add(boundObject);
}
10 голосов
/ 06 мая 2009

Один из способов сделать это - добавить выбранное поле в ваш объект данных. Затем вам нужно переопределить стиль списка по умолчанию и связать свойство isselected со свойством Selected вашего объекта. Затем вам просто нужно просмотреть элементы данных и обновить выбранное значение.

Если вы не реализуете это свойство Selected в качестве свойства зависимостей, вам нужно, чтобы ваш класс внедрил интерфейс INotifyPropertyChanged и вызвал событие propertyloaded, когда вы устанавливаете значение.

2 голосов
/ 10 сентября 2009

как программно выбрать несколько элементов в списке в wpf

foreach (var boundObject in objectsBoundToListBox)
{
    ListBox.SelectedItems.Add(boundObject);
}
2 голосов
/ 06 мая 2009

Вы должны сделать это:

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

Где itemIndex будет элементом, который вы хотите выбрать. Если вы хотите выбрать несколько элементов, вам нужно использовать свойство ListBox.SelectedIndexCollection.

1 голос
/ 26 июля 2014

Вы можете сделать это для нескольких разделов:

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

Где я - индекс предмета.

1 голос
/ 21 ноября 2010

Благодаря 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...