有没有办法将Command与WPF Toolkit DataGridHyperlinkColumn相关联?

dks*_*983 6 wpf datagrid command wpftoolkit

有什么办法可以将Command与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>
Run Code Online (Sandbox Code Playgroud)

在运行时,我可以看到正在正确评估绑定(调用Command的属性getter),但是当我单击超链接时不执行Command.有一个更好的方法吗?

谢谢,

丹尼尔

Abe*_*cht 10

您确定该命令与超链接相关联吗?我尝试在一个示例应用程序中设置它,并且该命令没有与超链接相关联(如果您返回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>
Run Code Online (Sandbox Code Playgroud)

如果你不得不创建多个列,这将非常烦人.在使用Reflector打开Toolkit之后,看起来它支持使用超链接的TargetName/ NavigationUrl范例.

如果你有一个场景,你需要在很多地方使用这种类型的列,我建议扩展DataGridHyperlinkColumn并添加一个Command属性.然后,您可以修改从返回的元素,GenerateElement以便它使用您的命令.