【问题标题】:WPF DataGrid DataGridHyperlinkColumn bound to UriWPF DataGrid DataGridHyperlinkColumn 绑定到 Uri
【发布时间】:2010-03-19 03:24:43
【问题描述】:

绑定到字符串类型(“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”方法的值始终为空。我的问题:如果出于任何原因我想绑定到 Uri 属性,Codeplex 的最新 DataGrid 是否可行?

【问题讨论】:

  • 在您的第二个示例中,为什么要将其绑定到 ContentBinding ?为什么不将转换后的属性包含在 Binding 属性中?
  • 这是我在msdn看到的msdn.microsoft.com/en-us/library/…

标签: wpf datagrid


【解决方案1】:

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();
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 2013-10-14
    • 2011-05-14
    • 1970-01-01
    • 2015-07-02
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多