Vb.net 强制转换我的列表框。选择编辑项以更正类型
我正在使用Vb.net 强制转换我的列表框。选择编辑项以更正类型,vb.net,wcf,silverlight,Vb.net,Wcf,Silverlight,我正在使用SL5和WCF用数据填充我的列表框。WCF方法返回一个List(Of Unit),我正试图将它转换为客户机上的List(Of MyService.Unit)。调试时,我可以看到lsbItems。SelectedItems的计数大于0,但它不会转换,并且我的变量是Nothing。这个Listbox在一个网格中-grdItems我在这里缺少什么 在XAML中: <ListBox ItemsSource="{Binding}" Name="lsbItems"> <Ite
SL5
和WCF
用数据填充我的列表框。WCF
方法返回一个List(Of Unit)
,我正试图将它转换为客户机上的List(Of MyService.Unit)
。调试时,我可以看到lsbItems。SelectedItems
的计数大于0,但它不会转换,并且我的变量是Nothing
。这个Listbox
在一个网格中-grdItems
我在这里缺少什么
在XAML中:
<ListBox ItemsSource="{Binding}" Name="lsbItems">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Description}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
转换:
Dim units = TryCast(lsbItems.SelectedItems, List(Of MyService.Unit))
ListBox.SelectedItems
是一个IList
,而不是一个列表(MyService.Unit)
,因此您的TryCast应该不会返回任何内容。IList提供了一个名为[Cast][1]的方法作为扩展方法。因此,您可以这样做:
Dim list As IEnumerable(Of MyService.Unit) = lsbItems.SelectedItems.Cast(Of MyService.Unit)()
作为一种扩展方法,它通过延迟执行来工作,因此,在您开始枚举对象之前,不会发生实际的转换
当然,您也可以采取稍微重一点的方法,简单地将项目复制到一个新列表中,如下所示:
Dim list As List(Of MyService.Unit) = New List(Of MyService.Unit)
For Each item As MyService.Unit In lsbItems.SelectedItems
list.Add(item)
Next
请原谅这里的任何错误——这些都是使用BrainCompiler 1.0在iPhone上输入的,因此我还没有时间测试它
Dim list As List(Of MyService.Unit) = New List(Of MyService.Unit)
For Each item As MyService.Unit In lsbItems.SelectedItems
list.Add(item)
Next