Есть ли какой-либо способ, которым я могу связать Команду с DataGridHyperlinkColumn? Я попробовал это:
<DataGridHyperlinkColumn Header="Client Name" Binding="{Binding ShortName}">
<DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Hyperlink.Command"
Value="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ClientsSummaryView}}}"/>
<Setter Property="Hyperlink.CommandParameter" Value="{Binding}"/>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
Во времени выполнения я вижу, что привязка правильно оценивается (метод считывания свойства для Команды называют), но Команда не выполняется, когда я нажимаю гиперссылку. Существует ли лучший способ сделать это?
Спасибо,
Daniel
Вы уверены, что команда связана с гиперссылкой? Я попытался настроить это в примере приложения, и команда не была связана с гиперссылкой (если вы вернете false из CanExecute
, вы сможете быстро определить, подключена ли она).
Вместо этого я создал DataGridTemplateColumn
для достижения этой цели:
<DataGridTemplateColumn Header="Client Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Command="{Binding DataContext.NavigateToClientCommand, RelativeSource={RelativeSource AncestorType={x:Type local:ClientsSummaryView}}}"
CommandParameter="{Binding ShortName}">
<TextBlock Text="{Binding ShortName}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Это сильно раздражало бы, если бы вам пришлось создать несколько столбцов. После взлома Toolkit с помощью Reflector похоже, что он поддерживает парадигму TargetName
/ NavigationUrl
для использования гиперссылки.
Если у вас есть сценарий, в котором вам потребуется этот тип столбца во многих местах, я бы предложил расширить DataGridHyperlinkColumn
и добавить свойство Command. Затем вы можете изменить элемент, возвращаемый из GenerateElement
, чтобы он использовал вашу команду.