WPF MVVM получает объект строки после клика DataGridHyperlinkColumn

113
6

Я использую шаблон MVVM WPF и имею 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 представляет текст "Ссылка". Когда DataGrid заполняется, каждая строка имеет последний столбец со ссылкой, что позволит пользователям видеть детали. Чтобы показать подробности, мне нужно получить весь объект в строке, на которую была нажата ссылка "Ссылка".

К сожалению, я еще не нашел решение. Может быть, есть очевидное решение? :)

Спасибо.

спросил(а) 2020-04-04T03:27:59+03:00 6 месяцев, 3 недели назад
1
Решение
99

Если вам нужно передать параметры, то лучше использовать 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>

Теперь создайте команду под названием NavigateToLinkCommand и строку Property под названием Link в вашей модели ViewModel, и текущая строка DataContext будет передана как параметр вашей Command и обратите внимание на DataContext AncestorType, для которого установлен ваш ViewModel.

ответил(а) 2020-04-04T03:48:04.683072+03:00 6 месяцев, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема