代码之家  ›  专栏  ›  技术社区  ›  VVS

如何获取DataGrid的活动行详细信息的夹点

  •  1
  • VVS  · 技术社区  · 14 年前

    我有一个包含另一个网格的rowdetailTemplate的数据报。

    我想对该详细信息中某一行的双击作出反应,并将该单元格的内容填充到所选父行的相应单元格中。

    <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不熟悉,也不知道如何掌握当前可见的detailgrid并订阅它的事件。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Fredrik Hedblad    14 年前

    您可以在RowDetails数据网格中添加DataGridRow的样式,并从中订阅MouseDoubleClick事件。

    <datagrid.rowdetailTemplate>
    <数据模板>
    <datagrid name=“datagrid1details”itemssource=“绑定路径=可能的条件”autogenerateColumns=“false”>
    <datagrid.resources>
    <STYLE TARGETYPE=“X:类型数据报行”>
    <eventsetter event=“mousedoubleclick”handler=“detailedDataGridRow_mousedoubleclick”/>
    &风格/风格;
    </datagrid.resources>
    <datagrid.columns>
    <dataGridTextColumn header=“similiability”binding=“binding path=key”/>gt;
    <dataGridTextColumn header=“可能的新链接源”binding=“绑定路径=值”/>gt;
    </datagrid.columns>
    </datagrid>
    </datatemplate>
    </datagrid.rowdetailtemplate>
    < /代码> 
    
    

    代码隐藏,简单事件处理程序

    //填充单元格数据..您可以访问这样的值
    void detailedDataGridRow_mousedoubleclick(对象发送程序,mouseButtonEventargs e)
    {
    DataGridRow ClickedDataGridRow=作为DataGridRow的发件人;
    //详细信息:clickedDataGridRow.item
    //主数据报ID:DataGrid1.SelectedItem
    }
    < /代码> 
    
    

    更新

    行细节和DataGridRow是连接的,有点像。RowDetails在VisualTree的DataGridRow中,所以有很多方法可以访问它(事件、行走VisualTree等),但我认为没有属性或类似的东西可以直接访问(据我所知)。Snoop的屏幕截图,在DataGridRow中显示DataGridDetailsPresenter

    从那里订阅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
    }
    

    更新

    行细节和DataGridRow是连接的,有点像。RowDetails在VisualTree的DataGridRow中,所以有很多方法可以访问它(事件、行走VisualTree等),但我认为没有属性或类似的东西可以直接访问(据我所知)。Snoop的屏幕截图,在DataGridRow中显示DataGridDetailsPresenter

    alt text