WPF DataGrid DataGridHyperlinkColumn绑定到Uri

时间:2010-03-19 03:24:43

标签: wpf datagrid

绑定到字符串类型(“http://something.com”)的属性时没问题。但是,我似乎在旧示例中​​已经看到直接绑定到Uri属性。

        <dg:DataGridHyperlinkColumn IsReadOnly="True"
                    Header="Uri" Binding="{Binding Path=NavigURI}" />

NavigURI是Uri。最近的文档似乎需要转换器

<DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}"  ContentBinding="{Binding Email, Converter={StaticResource EmailConverter}}" />

我也尝试使用转换器,但无论是否有转换器列都是空的。 调试显示传递给“Convert”方法的值始终为null。我的问题:如果出于任何原因我想要绑定到Uri属性,那么来自Codeplex的最新DataGrid是否可行?

1 个答案:

答案 0 :(得分:5)

ContentBinding属性可用于显示实际URL以外的文本。例如,如果我使用 ProductName 中友好的,人类可读的文本和 ProductUri 中的实际URL绑定数据,我可能会这样做:

<DataGridHyperlinkColumn Name="productColumn"
                     Binding="{Binding Path=ProductUri}"
                     ContentBinding="{Binding Path=ProductName}"
                     Header="Product"
                     IsReadOnly="True"
                     Width="*">
<DataGridHyperlinkColumn.ElementStyle>
    <Style TargetType="TextBlock">
        <EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
    </Style>
</DataGridHyperlinkColumn.ElementStyle>

在DataGrid的MSDN示例代码中,EmailConverter正在删除“mailto:”和@及其后的所有内容,并且只显示mailto链接的用户名部分。但是,底层链接(HTML术语中的href属性)保持不变。因此,例如,可见文本可能是“mjgreen”,但处理程序OnHyperlinkClick将收到“mailto:mjgreen@company.com”的NavigateUri属性。顺便说一下,获取NavigateUri的代码如下所示:

private void OnHyperlinkClick(object sender, RoutedEventArgs e)
{
    var destination = ((Hyperlink)e.OriginalSource).NavigateUri;
    Trace.WriteLine("Browsing to " + destination);

    using (Process browser = new Process())
    {
        browser.StartInfo = new ProcessStartInfo
            {
                FileName = destination.ToString(),
                UseShellExecute = true,
                ErrorDialog = true
            };
            browser.Start();
        }
}