2013-06-07 4 views

Répondre

1

Vous pouvez utiliser l'événement RowDetailsVisibilityChanged (msdn) et dans le gestionnaire d'événements, vous pouvez vérifier la colonne sélectionnée et masquer ou afficher les détails des lignes.

Dans l'exemple ci-dessous, je ne souhaite pas afficher les détails des lignes lorsque je sélectionne une cellule dans la colonne "Nom".

XAML:

<DataGrid Name="outerGrid" AutoGenerateColumns="False"     
      ItemsSource="{Binding}"     
      RowDetailsVisibilityChanged="outerGrid_RowDetailsVisibilityChanged" > 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid Name="innerGrid" ItemsSource="{Binding Items}" AutoGenerateColumns="False" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="ID" Binding="{Binding Id}"/> 
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
        <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/> 
       </DataGrid.Columns> 
      </DataGrid> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="ID" Binding="{Binding Id}"/> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
     <DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/> 
    </DataGrid.Columns> 
</DataGrid> 

code-behind:

private void outerGrid_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e) 
{ 
    DataGrid dg = sender as DataGrid; 
    if (dg != null) 
    { 
     if (dg.CurrentCell != null && dg.CurrentCell.Column.Header.ToString() == "Name") 
     {      
      e.DetailsElement.Visibility = System.Windows.Visibility.Collapsed; 
     } 
     else 
     { 
      e.DetailsElement.Visibility = System.Windows.Visibility.Visible; 
     } 
    } 
} 
Questions connexes