2010-11-23 24 views
1

私は別のグリッドを含むRowDetailsTemplateを持つDataGridを持っています。DataGridのアクティブなRowDetailsの把握方法

そのdetailgridの行のダブルクリックに反応して、選択した親行の対応するセルにセルの内容を入力したいとします。

私の理解から、detailgridは行が変更されるたびに再作成されます。 WPFの新機能で、現在表示されているdetailgridのグリップを取得し、そのイベントに登録する方法については漠然としています。

答えて

1

RowDetails DataGrid内でDataGridRowのスタイルを追加し、そこからMouseDoubleClickイベントを購読することができます。

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

の背後にあるコード、単純なEventHandlerの

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

更新

RowDetailsとDataGridRowは一種の、接続されています。 RowDetailsはVisualTreeのDataGridRowにありますので、イベント(VisualTreeなどのウォーキング)にはさまざまな方法でアクセスできますが、プロパティや、あなたに直接アクセスできるようなものはないと思います(私の知る限り)。 DataGridRowに

alt text

+0

@VVSをDataGridDetailsPresenterを示すスヌープからのスクリーンショット:または私は質問をmissunderstandたのですか? –

+0

私は別のプロジェクトに同行してこの問題を再訪しなかったことを認めなければなりません。私がまだ理解していないのは、DataGridRowとRowDetailsがどのように接続されているかです。あなたのソリューションが示すように、イベントの「送信者」を使用して関連する行を見つける唯一の方法はありますか? – VVS

関連する問題