2011-12-07 16 views
3

私はListViewと選択されたオブジェクトの詳細が表示される領域でウィンドウを作成しようとしています。リストビューには、ObservableCollection(Of T)コレクションに格納されているアイテムが表示されます。項目自体にはObservableCollecton(Of T)コレクションも含まれており、別のListViewの詳細領域に表示され、最初のListViewの選択項目に表示されます。WPF Databinding 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'.

LINE-とColumNumer私のリストビュー(.View)の<GridView>で指している

これが初でありますリストビュー

<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> 

SoがありますオブジェクトのCollectionプロパティにバインドする方法は何もできませんか?

答えて

3

例外メッセージから、問題はDisplayMemberBindingの2番目のリストビューにあります。文字列see MSDNの代わりにバインディング式を指定する必要があるためです。あなたの最初のリストビューのように:

<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> 
+0

これは機能します。ありがとうalot :)。ちょうどバインディング式を逃した。しかし、私はバインディング式なしで既にそれを使用していたと思った...多分何かにそれを混乱..とにかく..ありがとう助け:) – Nicholas

+0

私はあなたが 'ItemsControl.DisplayMemberPath'プロパティでそれを混乱させたと思う確かに文字列です。 – nemesv