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。
我正在使用 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。