WPF MVVM 在 DataGridHyperlinkColumn 单击后获取行对象

WPF MVVM get row object after the DataGridHyperlinkColumn click

我正在使用 WPF MVVM 模式并且有一个 DataGrid,例如:

        <DataGrid Grid.Row="1" Margin="0,10,0,0" AutoGenerateColumns="False" ItemsSource="{Binding Path=displayedResults}">
        <DataGrid.Columns>
            <DataGridTextColumn Width="*" Header="Operation" Binding="{Binding Path=Mode}" />
            <DataGridTextColumn Width="*" Header="Status" Binding="{Binding Path=Result, Converter={StaticResource EnumToString}}" />
            <DataGridHyperlinkColumn Width="100" Header="Details" ContentBinding="{Binding Source={StaticResource DetailsLink}}" />
        </DataGrid.Columns>
    </DataGrid>   

DetailsLink 静态资源表示文本 "Link"。当 DataGrid 填满时,每行的最后一列带有 link,这将允许用户查看详细信息。要显示详细信息,我需要在单击 link "Link" 的行处获取整个对象。

很遗憾,我还没有找到解决方案。可能有一个明显的决定吗? :)

谢谢。

如果您需要传递参数,那么最好使用 ICommand,因此创建一个 DataTemplate 而不是使用 HyperLinkColoumn,如下所示:

    <DataGridTemplateColumn Header="Link">
           <DataGridTemplateColumn.CellTemplate>
               <DataTemplate>
                   <TextBlock>
                      <Hyperlink Command="{Binding Path=NavigateToLinkCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                      CommandParameter="{Binding}">
                     <TextBlock Text="{Binding Path=DataContext.Link, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                       </Hyperlink>
                     </TextBlock>
                 </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

现在在您的 ViewModel 中创建一个名为 NavigateToLinkCommand 的命令和一个名为 Link 的字符串 属性,当前行 DataContext 将作为您的 Command,并记下您的 ViewModel 设置的 AncestorType DataContext。