将我的Listbox.SelectedItems转换为正确的类型

时间:2013-09-19 20:56:18

标签: vb.net wcf silverlight

我正在使用SL5WCF一起填充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))

1 个答案:

答案 0 :(得分:2)

ListBox.SelectedItemsIList,而不是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上输入的,因此我没有时间对其进行测试。