2016-07-03 187 views
1

的父的DataRow我有以下数据网格:WPF数据网格RowDetails - 内DataGrid绑定到外数据网格

<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应该精确显示与所选行相同的行,但显示newValue而不是oldValue。

问题:我不知道如何指向所选行的DataBound项目。

我已经实现了这个使用TextBoxes而不是一个新的内部DataGrid,但这确实是很多代码。

什么是内部DataGrid的正确绑定?

+0

外部网格会显示行中的一些值。如果我们编辑行,它将包含新值,现在如果单击该行查看详细视图,详细视图应显示存在的旧值。那是你想要达到的目标吗? – AnjumSKhan

回答

1

内部DataGrid的绑定不起作用,因为ItemSource应该绑定到一个集合。您可以使用Converter将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

完美运作。 一个重点,以防万一:使用是非常重要的。没有,抛出XamlParseException。我偶然遇到了这个问题。 – ray