wpf - 有没有办法将命令与 WPF 工具包 DataGridHyperlinkColumn 相关联?

标签 wpf datagrid command wpftoolkit

有什么方法可以将命令与 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>

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

谢谢,

丹尼尔

最佳答案

是的,但不符合标准 DataGridHyperlinkColumn .您需要稍微增强该类。

public class DataGridHyperlinkColumn : System.Windows.Controls.DataGridHyperlinkColumn
{
    /// <summary>
    /// Support binding the hyperlink to an ICommand rather than a Uri
    /// </summary>
    public BindingBase CommandBinding { get; set; }

    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        var result = base.GenerateElement(cell, dataItem);

        if (((TextBlock)result).Inlines.FirstInline is Hyperlink link)
            BindingOperations.SetBinding(link, Hyperlink.CommandProperty, CommandBinding);

        return result;
    }
}
设置正确的命名空间映射后,您可以执行以下操作:
<c:DataGridHyperlinkColumn Header="Booking" Binding="{Binding Path=ReservationNo}" CommandBinding="{Binding Path=NavigateCommand}" />
这假设 NavigateCommand存在于您的 View 模型对象上。

关于wpf - 有没有办法将命令与 WPF 工具包 DataGridHyperlinkColumn 相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2654216/

相关文章:

c# - 当文本超出范围 WPF 时显示省略号 (...) 按钮

wpf - DataGridCell BorderBrush 不工作

linux - 如何将 shell 变量作为命令行参数传递给 shell 脚本

wpf - 在 MVVM 中,如何将 View 逻辑与模型和业务逻辑保持在 View 模型之外?

c# - 以编程方式添加一个上下文菜单,其 Click 处理程序知道哪个项目被右键单击

c# - DataGrid 中的可见行减少 1(使用 ContainerFromItem 计算)

c# - 偏移列标题会留下背景显示的空间

linux - 如何使用 Jenkins shell 命令复制文件但不包括某些目录

bash - 使用 tr 删除特定字符串

wpf - 控制模板可见性触发器