Программно изменить выбранный ListBoxItem

Можно ли изменить выбранный ListBoxItem из кода программной части в Windows Presentation Foundation?

На самом деле это довольно простая задача, у меня есть кнопки Next и Previous, и они представляют следующий и предыдущий элемент в ListBox. Но myListBox.items, конечно, являются объектными представлениями того, что я сохранил в файле ListBox.

Итак, как можно получить ListBoxItem, чтобы установить свойство IsSelected?


person Filip Ekberg    schedule 29.10.2009    source источник


Ответы (2)


Вероятно, проще всего сделать в вашем случае, поскольку вы делаете Предыдущее и Следующее, просто увеличиваете SelectedIndex:

//Increment
if(myListBox.SelectedIndex < myListBox.Items.Count -1)
     myListBox.SelectedIndex++;

//Decrement
if(myListBox.SelectedIndex > 0)
     myListBox.SelectedIndex--;

Если вы действительно хотите получить ListBoxItem, из которого состоит объект, добавленный вами в ListBox, вы можете сделать следующее:

ListBoxItem item = myListBox.ItemContainerGenerator.ContainerFromItem(objectIWantToSelect);
item.IsSelected = true;
person Anderson Imes    schedule 29.10.2009

У вас есть различные варианты:

  • используйте свойство SelectedItem или SelectedIndex элемента управления ListBox
  • если у вас есть ListBoxItem, а не родительский ListBox, используйте ItemsControl.ItemsControlFromItemContainer(listboxitem) для получения родительского ListBox (и используйте предыдущие свойства)
  • использовать интерфейсы ICollectionView (CollectionViewSource.GetDefaultView) и его методы (MoveCurrentToNext, MoveCurrentToPrevious)
person japf    schedule 29.10.2009
comment
Не знаю, почему вы получили отрицательный голос. Ваш ответ технически правильный. Я проголосовал, чтобы компенсировать :) - person Anderson Imes; 29.10.2009
comment
Тоже не знаю... Спасибо :-) - person japf; 29.10.2009