2010-03-19 31 views
0

綁定到字符串類型的屬性(「http://something.com」)時沒有問題。但是,我似乎已經看到了直接綁定到Uri財產的舊例子。綁定到Uri的WPF DataGrid DataGridHyperlinkColumn

 <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是否可行?

+0

在第二個示例中,爲什麼要將它綁定到ContentBinding?爲什麼不包含轉換爲綁定屬性? – 2010-03-19 17:05:22

+0

這就是我在msdn看到的 http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid%28VS.100%29.aspx – MicMit 2010-03-20 10:57:50

回答

5

ContentBinding屬性可用於顯示除實際URL之外的文本。例如,如果我在產品名稱實際的URL ProductUri結合,友好的,人類可讀的文本數據,我可以這樣做:

<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> 

在MSDN示例代碼對於DataGrid,EmailConverter會剝離「mailto:」和@以及後面的所有內容,並且只顯示mailto鏈接的用戶名部分。但是,HTML中的底層鏈接href屬性並未改變。因此,例如,可見文本可能是「mjgreen」,但處理程序OnHyperlinkClick將收到「mailto:[email protected]」的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(); 
     } 
}