2009-05-06 2 views
14

В WPF, я хотел бы, чтобы установить выбранные показатели в System.Windows.Controls.ListBoxПрограммным выбора товаров/индексов в ListBox

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

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

ответ

9

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

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

+0

Это сработало отлично, спасибо вам большое! – Alex

+0

Спасибо! ... Это сработало отлично. Я просто добавлю сегмент кода, который я использовал ниже. –

+0

На самом деле это сложнее, если сравнивать с даналом ниже. – henon

2

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

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

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

+1

System.Windows.Controls.ListBox не похож на System.Windows.Forms.ListBox в том, что касается свойства SelectedIndexCollection – Alex

+0

Мой плохой. Извини за это. – jgallant

+0

SelectedItem все равно будет работать. –

26

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

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+1

Это приведет к событию SelectionChanged один раз для каждого добавленного элемента. Когда вы выбираете группу элементов вручную со сдвигом, она поднимается только один раз для всей группы. – FreddyFlares

2

как программно выбрать несколько элементов в ListBox в МОФ

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+0

спасибо, это камни! – henon

+5

Вы на самом деле вырезали и вставляли это из danlash в эту тему. – Epirocks

1

Благодаря 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)); 
} 
1

Вы можете сделать это для нескольких секций:

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

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

Смежные вопросы