2010-11-23 3 views
1

다른 그리드를 포함하는 RowDetailsTemplate이있는 DataGrid가 있습니다.DataGrid의 활성 RowDetails 그립을 얻는 방법

해당 detailgrid의 한 행에 doubleclick을 적용하고 선택한 부모 행의 해당 셀에 셀의 내용을 채 웁니다.

<DataGrid Name="dataGrid1" DataContext="{Binding}" ItemsSource="{Binding Source={StaticResource ..}}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="Old Link Source" Binding="{Binding Path=OldLinkSource}"/> 
    <DataGridTextColumn Header="New Link Source" Binding="{Binding Path=NewLinkSource}"/> 
    </DataGrid.Columns> 

    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid Name="dataGrid1Details" ItemsSource="{Binding Path=PossibleCandidates}" AutoGenerateColumns="False"> 
     <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> 
</DataGrid> 

행이 변경 될 때마다 detailgrid가 다시 작성됩니다. 저는 WPF에 익숙하지 않고 현재 보이는 디테일 그리드의 그립을 얻고 이벤트에 가입하는 방법에 관해서 우둔합니다.

답변

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> 

코드, 간단한 이벤트 핸들러

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

관련 문제