将子对象绑定到VB.Net中的ListView时出现问题

时间:2011-03-15 06:16:39

标签: vb.net binding

我有一个ObservableCollection of Measurement-Objects

Dim measurement As New Collections.ObjectModel.ObservableCollection(Of Measurement)

测量的地方

Public Class Measurement
  Public Property Value As Single
  Public Property Unit As String
  Public Property Enviroment As Enviroment
End Class

和Enviroment(简化)

Public Class Enviroment
  Public Equipment As String
End Class

现在我将此Collection绑定到ListView

<ListView ItemsSource="{Binding}">
    <ListView.Resources>
        <my:SingleToStringConverter x:Key="singleToString"></my:SingleToStringConverter>
        <DataTemplate x:Key="ValueTemplate">
            <TextBlock Text="{Binding Value, Converter={StaticResource singleToString}}"></TextBlock>
        </DataTemplate>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Value" CellTemplate="{StaticResource ValueTemplate}"></GridViewColumn>
            <GridViewColumn Header="Unit" DisplayMemberBinding="{Binding Unit}"></GridViewColumn>
            <GridViewColumn Header="Enviroment" DisplayMemberBinding="{Binding Enviroment.Equipment}"></GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

完成;转换器是:

Public Class SingleToStringConverter
  Implements IValueConverter

  Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
    Return CSng(value).ToString(Globalization.CultureInfo.InvariantCulture)
  End Function

  Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
    Return CSng(value.ToString)
  End Function
End Class

但ListView不显示SubObject Eviroment的任何属性。它不支持INotifyPropertyChanged,但我确定它在添加到集合之前就已存在。但现在显示了值。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您尝试绑定到字段而不是属性。我认为你的Enviroment-Object应该是这样的:

Public Class Enviroment
    Public **Property** Equipment As String
End Class

您无法绑定到公共字段。