Можно ли изменить выбранный ListBoxItem из Code-Behind в Windows Presentation Foundation?

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

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

1
Filip Ekberg 29 Окт 2009 в 18:45

2 ответа

Лучший ответ

Вероятно, в вашем случае проще всего, поскольку вы выполняете Previous и Next, просто увеличивайте 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;
5
Anderson Imes 29 Окт 2009 в 18:52

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

  • используйте свойство SelectedItem или SelectedIndex элемента управления ListBox
  • если у вас есть ListBoxItem, а не родительский ListBox, используйте ItemsControl.ItemsControlFromItemContainer (listboxitem) для получения родительского ListBox (и используйте предыдущие свойства)
  • использовать интерфейсы ICollectionView (CollectionViewSource.GetDefaultView) и его методы (MoveCurrentToNext, MoveCurrentToPrevious)
1
japf 29 Окт 2009 в 18:51
Не уверен, почему вы получили отрицательный голос. Ваш ответ технически правильный. Я проголосовал за компенсацию :)
 – 
Anderson Imes
29 Окт 2009 в 20:10
Тоже не знаю ... Спасибо :-)
 – 
japf
29 Окт 2009 в 21:34