2016-07-03 19 views
1

私は、次のデータグリッドを持っている:WPFのDataGrid RowDetails - 外側のDataGridの親のDataRowに内部データグリッドをバインド

<DataGrid x:Name="dgOuter" 
       ItemsSource="{Binding}" AutoGenerateColumns="false"> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}" 
         AutoGenerateColumns="false"> 
         <DataGridTextColumn Header="ID" Binding="{Binding ID.oldValue}" /> 
         <DataGridTextColumn Header="Name" Binding="{Binding Name.oldValue}" /> 
         <DataGridTextColumn Header="Gender" Binding="{Binding Gender.oldValue}" /> 
        </DataGrid> 
       </StackPanel> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate>    
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding ID.newValue}" /> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name.newValue}" /> 
      <DataGridTextColumn Header="Gender" Binding="{Binding Gender.newValue}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

外DataGridのDataContextのは、プロパティとして、ID、名前と性別を含むオブジェクトのリストです。これらはoldValueとnewValueを含むオブジェクトです。

目的:RowDetailsは、選択した行と同じ行を正確に表示しますが、oldValueではなくnewValueを表示します。

問題:選択した行のDataBound項目をポイントする方法がわかりません。

私はすでに新しい内側のDataGridの代わりにTextBoxesを使用してこれを達成しましたが、これは実際にはたくさんのコードです。

内部DataGridの正しいバインディングは何ですか?

+0

アウターグリッドは、行内にいくつかの値を表示します。行を編集すると、新しい値が表示されます。その行をクリックして詳細ビューを表示すると、詳細ビ​​ューには既存の値が表示されます。それは達成しようとしていることですか? – AnjumSKhan

答えて

1

ItemSourceがCollectionにバインドされているため、内部DataGridのBindingsは機能しません。コンバーターを使用して、SelectedItemをコレクション(たとえばリスト)にラップすることができます。

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"> 
    <DataGrid.Resources> 
     <local:ToCollectionConverter x:Key="ToCollectionConverter" /> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding ID.newValue}" /> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name.newValue}" /> 
     <DataGridTextColumn Header="Gender" Binding="{Binding Gender.newValue}" /> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid ItemsSource="{Binding Converter={StaticResource ToCollectionConverter}}"  
         AutoGenerateColumns="False" 
         HeadersVisibility="None" 
         > 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="ID" Binding="{Binding ID.oldValue}" /> 
        <DataGridTextColumn Header="Name" Binding="{Binding Name.oldValue}" /> 
        <DataGridTextColumn Header="Gender" Binding="{Binding Gender.oldValue}" /> 
       </DataGrid.Columns> 
      </DataGrid> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 
+0

完全に動作します。 重要な点が1つあります。の使用は本当に重要です。 Withoutを指定すると、XamlParseExceptionがスローされます。私は偶然、この問題に遭遇しました。 – ray

関連する問題