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

Ole*_*sii 0 .net c# wpf xaml mvvm

我正在使用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>   
Run Code Online (Sandbox Code Playgroud)

DetailsLink静态资源表示文本"链接".当DataGrid填充时,每行都有包含链接的最后一列,这将允许用户查看详细信息.要显示详细信息,我需要在行中获取整个对象,单击链接"链接".

不幸的是,我还没有找到解决方案.可能有一个明显的决定?:)

谢谢.

Xi *_*gma 5

如果您需要传递参数,那么最好使用a 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>
Run Code Online (Sandbox Code Playgroud)

现在创建一个名为的函数NavigateToLinkCommand和一个Link在ViewModel中调用的字符串Property ,当前行将DataContext作为您的参数传递Command,并记下AncestorTypeViewModel设置的DataContext .