使用WPFToolKit的DataGridHyperlinkColumn

时间:2009-03-16 17:40:54

标签: wpf vb.net xaml datagrid wpftoolkit

我正在使用WPFToolkit的Datagrid控件。我可以填充数据网格,但是我遇到了DataGridHyperlinkColumn的问题。我希望它可以直观地显示链接作为Person的名字,但是链接可以转到UriLink的值。

我该怎么做?我究竟做错了什么?

的Xaml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}"></dg:DataGridHyperlinkColumn>

或者,我宁愿放入一个事件处理程序,并创建页面对象以导航到,但我似乎无法从事件的两个参数(在这种情况下为o和e)中提取任何数据,其中obj1 / obj2是单击的超链接行的对象/变量。

替代Xaml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}">
    <dg:DataGridHyperlinkColumn.ElementStyle>
    <Style TargetType="TextBlock">
    <EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
    </Style>
    </dg:DataGridHyperlinkColumn.ElementStyle>
    </dg:DataGridHyperlinkColumn>

VB代码(替代Xaml):

Private Sub OnHyperlinkClick(ByVal o As Object, ByVal e As RoutedEventArgs)

        'TODO: Create page to navigate to
        Dim page As New RedirectPage(obj1, obj2)
        Me.NavigationService.Navigate(page)

End Sub

3 个答案:

答案 0 :(得分:2)

将o作为TextBlock,它的DataContext是你的行的对象。您可以将其强制转换为对象类型。

答案 1 :(得分:0)

也许Hyperlink.RequestNavigate事件会更好?看起来EventArgs包含导航目标所在的URI,它应该是超链接控件本身的URI。

答案 2 :(得分:0)

正如AKCODer所说,它位于DataContext中。使用OnHyperlinkClick事件处理程序,我使用了以下内容:

DirectCast(DirectCast(DirectCast(e.Source, System.Object), System.Windows.Documents.Hyperlink).DataContext, System.Object)