2010-11-23 29 views
1

J'ai un DataGrid avec un RowDetailsTemplate contenant une autre grille.Comment obtenir l'accroche des RowDetails actifs d'un DataGrid

Je veux réagir sur un double-clic sur une ligne dans cette grille de détail et remplir le contenu de la cellule dans une cellule correspondante de la ligne parente sélectionnée. D'après ce que je sais, detailgrid est recréé chaque fois que la ligne est changée. Je suis nouveau sur WPF et je n'ai aucune idée de la façon de saisir le detailgrid actuellement visible et de m'abonner à ses événements.

Répondre

1

Vous pouvez ajouter un style pour DataGridRow dans le composant DataDrid de RowDetails et vous abonner à l'événement MouseDoubleClick à partir de là.

<DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid Name="dataGrid1Details" ItemsSource="{Binding Path=PossibleCandidates}" AutoGenerateColumns="False"> 
      <DataGrid.Resources> 
       <Style TargetType="{x:Type DataGridRow}"> 
        <EventSetter Event="MouseDoubleClick" Handler="DetailedDataGridRow_MouseDoubleClick"/> 
       </Style> 
      </DataGrid.Resources> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Similarity" Binding="{Binding Path=Key}"/> 
       <DataGridTextColumn Header="Possible New Link Source" Binding="{Binding Path=Value}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </DataTemplate> 
</DataGrid.RowDetailsTemplate> 
code

derrière, EventHandler simple,

// Fill cell data.. You can access the values like this 
void DetailedDataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    DataGridRow clickedDataGridRow = sender as DataGridRow; 
    // Details: clickedDataGridRow.Item 
    // Main DataGrid: dataGrid1.SelectedItem 
} 

Mise à jour

Les RowDetails et l'DataGridRow sont connectés, en quelque sorte. RowDetails se trouve dans DataGridRow dans VisualTree, il y a donc plusieurs façons d'y accéder (événements, marche VisualTree etc.) mais je ne pense pas qu'il existe une propriété ou quelque chose comme ça qui vous donne un accès direct (pour autant que je sache). Capture d'écran de Snoop montrant la DataGridDetailsPresenter dans un DataGridRow

alt text

+0

@VVS: Ou ai-je missunderstand la question? –

+0

Je dois admettre que j'ai déménagé avec un autre projet et n'ai pas revisité ce problème. Ce que je ne comprends toujours pas, c'est comment un DataGridRow et les RowDetails sont connectés. Est-ce que le seul moyen de trouver la ligne associée en utilisant l '"expéditeur" d'un événement, comme votre solution l'a montré? – VVS