Существует ли способ связать Команду с Инструментарием WPF DataGridHyperlinkColumn?

Есть ли какой-либо способ, которым я могу связать Команду с 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

6
задан dks1983 16 April 2010 в 15:32
поделиться

1 ответ

Вы уверены, что команда связана с гиперссылкой? Я попытался настроить это в примере приложения, и команда не была связана с гиперссылкой (если вы вернете 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 , чтобы он использовал вашу команду.

10
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: