我正在使用SL5
与WCF
一起填充Listbox
数据。 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>
使用WCF异步方法绑定:
grdItems.DataContext = e.Result
转换:
Dim units = TryCast(lsbItems.SelectedItems, List(Of MyService.Unit))
答案 0 :(得分:2)
ListBox.SelectedItems
是IList
,而不是List(of MyService.Unit)
,因此您的TryCast应该返回Nothing
。 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上输入的,因此我没有时间对其进行测试。