WPF数据绑定ListView到一个对象的属性,可以是什么都没有

时间:2011-12-07 10:28:02

标签: wpf vb.net data-binding

我正在尝试创建一个带有ListView和一个区域的窗口,其中显示所选对象的详细信息。 Listview显示存储在ObservableCollection(Of T)集合中的项目。这些项目本身也包含一个ObservableCollecton(Of T)集合,然后应该显示在另一个ListView的详细信息区域中,相应地显示在第一个ListView的所选项目中。

问题: InitializeComponent()抛出异常(XAMLParseException)。

例外:
Set property 'System.Windows.Controls.GridViewColumn.DisplayMemberBinding' threw an exception.

的InnerException:
Object of type 'System.String' cannot be converted to type 'System.Windows.Data.BindingBase'.

Exception的Line-和ColumNumer指向我的ListView的<GridView>(。View)

这是第一个ListView

<ListView ItemsSource="{Binding Path=MyObjectCollection, Mode=OneWay}" SelectedItem="{Binding Path=Selected, Mode=OneWayToSource}">
   <ListView.View>
      <GridView>
         <GridViewColumn DisplayMemberBinding="{Binding Path=Name, Mode=OneWay}">
            <GridViewColumnHeader Content="Name" />
         </GridViewColumn>
      </GridView>
   </ListView.View>
</ListView>

这是第二个ListView

<ListView ItemsSource="{Binding Path=SelectedItem.MySubCollection, Mode=OneWay}">
   <ListView.View>
      <GridView> <!-- Thats the Line where the Exception is pointing at -->
         <GridViewColumn Width="150" DisplayMemberBinding="Key">
            <GridViewColumnHeader Content="Key" />
         </GridViewColumn>
         <GridViewColumn Width="150" DisplayMemberBinding="Value">
            <GridViewColumnHeader Content="Value" />
         </GridViewColumn>
      </GridView>
   </ListView.View>
</ListView>

因此。如何绑定到Object的Collection属性可能什么都没有?

1 个答案:

答案 0 :(得分:3)

在异常消息中,问题与第二个列表视图中的DisplayMemberBinding有关。因为您必须提供Binding表达式而不是字符串see MSDN。就像在你的第一个listview中一样:

<ListView ItemsSource="{Binding Path=SelectedItem.MySubCollection, Mode=OneWay}">
   <ListView.View>
      <GridView> <!-- Thats the Line where the Exception is pointing at -->
         <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=Key}">
            <GridViewColumnHeader Content="Key" />
         </GridViewColumn>
         <GridViewColumn Width="150" DisplayMemberBinding="{Binding Path=Value}">
            <GridViewColumnHeader Content="Value" />
         </GridViewColumn>
      </GridView>
   </ListView.View>
</ListView>