WPF VB.net ListBox как получить индекс выбранного элемента или отсортированный и сгруппированный список относительно источника элемента - PullRequest
1 голос
/ 12 февраля 2011

Добрый вечер всем,

Во-первых, спасибо, что нашли время, чтобы прочитать это.У меня возникли некоторые трудности с сортированным и сгруппированным списком в WPF vb.net 3.5, в котором источник элементов привязан к ObservableCollection.

Что я хочу сделать, это извлечь часть данных изисточник элементов ObservableCollection в зависимости от того, какой элемент в списке выбран пользователем.

У меня почти все работает, но список отсортирован, но он не соответствует индексу источника элементов.

Вот код, который у меня есть до сих пор:

Dim i As Integer = lstBox1.Items.IndexOf(lstBox1.SelectedItem)
MessageBox.Show(myListSource.Item(i).Description.ToString, "Source Description")

Как я уже упоминал ранее, поскольку lstBox отсортирован, а также сгруппированы индексы, которые не совпадают.знаете, как я могу получить нужную информацию из списка источников в зависимости от выбранного элемента в списке?

Еще раз, большое спасибо за ваше время,

Роб

Ответы [ 3 ]

3 голосов
/ 12 февраля 2011

Вы можете привязать ItemsSource к ObservableCollection<Foo> и привязать SelectedItem к экземпляру Foo.

Таким образом, вы удалили зависимость от индекса списка -Вы можете группировать и сортировать по своему желанию - выбрав элемент в списке, текущий экземпляр в вашем классе поддержки (вероятно, ViewModel) будет обновляться через привязку.

Он должен выглядеть примерно так

<ListBox
    ItemsSource="{Binding MyCollection}"
    SelectedItem="{Binding CurrentSelection}" />

и в коде (ViewModel), действующем как DataContext для представления ...

Private _myCollection As ObservableCollection(Of Foo)
Public Property MyCollection As ObservableCollection(Of Foo)
Get
    Return _myCollection
End Get

Private _currentItem As Foo
Public Property CurrentItem As Foo
Get
    Return _currentItem
End Get
Set(ByVal value As Foo)
    Me._currentItem = value
End Set

(с извинениями, если у меня неверный синтаксис vb)

если вам нужен доступ к ListBox SelectedItem в вашей ViewModel, вы можете просто использовать свойство CurrentItem ...

MessageBox.Show(CurrentItem.Description.ToString, "Source Description")
0 голосов
/ 12 февраля 2011

Почему бы просто не привести SelectedItem к типу в вашей исходной коллекции?

MessageBox.Show(DirectCast(lstBox1.SelectedItem, MyType).Description.ToString, "Source Description")
0 голосов
/ 12 февраля 2011

Я не знаком с VB.NET, но вы можете привести lstBox1.SelectedItem к ожидаемому типу, а затем получить описание прямо из этого.

Dim foo As Foo = TryCast(lstBox1.SelectedItem, Foo)

If foo IsNot Nothing Then
    MessageBox.Show(foo.Dsecription, "Source Description")
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...