1

我正在使用SL5withWCF来填充我Listbox的数据。该WCF方法返回 a List(Of Unit),我试图将其转换为List(Of MyService.Unit)客户端上的 a 。当我调试时,我可以看到lsbItems.SelectedItemscount > 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))
4

1 回答 1

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

请原谅这里的任何错误——这些都是在 iPhone 上使用 BrainCompiler 1.0 输入的,因此我真的没有时间测试它。

于 2013-09-19T21:54:19.977 回答