有什么方法可以将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>
在运行时,我可以看到正在正确评估绑定(调用Command的属性getter),但单击超链接时不执行Command。有更好的方法吗?
谢谢,
丹尼尔
答案 0 :(得分:10)
您确定该命令与超链接相关联吗?我尝试在一个示例应用程序中设置它,并且该命令没有与超链接相关联(如果您从CanExecute
返回false,您将能够快速确定它是否已连线)。
相反,我创建了一个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>
如果你不得不创建多个列,这会非常烦人。在使用Reflector打开Toolkit之后,看起来它支持使用超链接的TargetName
/ NavigationUrl
范例。
如果你有一个场景,你需要在很多地方使用这种类型的列,我建议扩展DataGridHyperlinkColumn
并添加一个Command属性。然后,您可以修改从GenerateElement
返回的元素,以便它使用您的命令。