晚上好,
首先感谢您花时间阅读本文。 我在排序和排序方面遇到了一些困难。 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已经排序,并且分组的索引也不匹配。
根据列表框中的选定项目,是否有人知道如何从列表来源获取我想要的正确信息?
再次,非常感谢你的时间,
罗布
答案 0 :(得分:3)
您可以将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语法错误,请道歉)
因此,如果您需要访问ViewModel中的ListBox SelectedItem
,您只需使用CurrentItem
属性...
MessageBox.Show(CurrentItem.Description.ToString, "Source Description")
答案 1 :(得分:0)
我不熟悉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
答案 2 :(得分:0)
为什么不将SelectedItem强制转换为源集合中的类型?
MessageBox.Show(DirectCast(lstBox1.SelectedItem, MyType).Description.ToString, "Source Description")