spong
spong

Reputation: 1222

Using WPFToolKit's DataGridHyperlinkColumn

I'm using WPFToolkit's Datagrid control. I can populate the datagrid, but I'm having trouble with the DataGridHyperlinkColumn. I would like it to visually display the link as the Person's name, but for the link to go to whatever UriLink's value is.

How can I do this? What am I doing wrong?

Xaml:

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

Alternatively, I would rather put an event handler in instead, and create the page object to navigate to, but I can't seem to pull any data out of the event's two parameters (o and e in this case), where obj1/obj2 are objects/variables of the clicked hyperlink's row.

Alternative 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 code (for Alternative 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

Upvotes: 4

Views: 7729

Answers (3)

spong
spong

Reputation: 1222

As AKCODer said, it's in the DataContext. Using the OnHyperlinkClick event handler, I used the following:

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

Upvotes: 0

AKCODer
AKCODer

Reputation:

Cast o as a TextBlock, it's DataContext is your row's object. You can cast it as your object type.

Upvotes: 3

Andy
Andy

Reputation: 30418

Maybe the Hyperlink.RequestNavigate event would work better? It looks like the EventArgs contains the URI that the navigation target is, which should be the URI of the hyperlink control itself.

Upvotes: 0

Related Questions