如何使用WPF数据网格从DataGridHyperlinkColumn获取选定的值

use*_*840 0 c# wpf datagrid

我的数据网格有一个DataGridHyperlinkColumn,但是单击该超链接时我没有得到该值。我的数据网格是

<datagrid name="datagrid1">
   <column>
      <DataGridHyperlinkColumn Binding="{Binding ID}" Header="ID"  Width="100" >
         <DataGridHyperlinkColumn.ElementStyle>
            <Style TargetType="TextBlock" >
               <EventSetter  Event="Hyperlink.Click" Handler="Hyperlink_Click"  />
            </Style>
         </DataGridHyperlinkColumn.ElementStyle>
      </DataGridHyperlinkColumn>
   </column>
</datagrid>
Run Code Online (Sandbox Code Playgroud)

如何在Hyperlink_Click方法中获取ID?

har*_*r07 5

你可以得到IDTextBlockDataContext,像这样:

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
    //cast sender to TextBlock, and get it's data context
    var dc = ((TextBlock)sender).DataContext;
    //cast data context to your model type, and get the ID property
    var id = ((YourModelType)dc).ID;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以设置其他答案中建议TagTextBlock类似属性:

<DataGridHyperlinkColumn Binding="{Binding ID}" Header="ID"  Width="100" >
    <DataGridHyperlinkColumn.ElementStyle>
        <Style TargetType="TextBlock" >
            <Setter Property="Tag" Value="{Binding ID}" />
            <EventSetter  Event="Hyperlink.Click" Handler="Hyperlink_Click"  />
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
Run Code Online (Sandbox Code Playgroud)

然后,您可以ID在事件处理程序中获取价值,如下所示:

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
    TextBlock textblock = (TextBlock)sender;
    string id = (string)textblock.Tag;
}
Run Code Online (Sandbox Code Playgroud)