Reputation: 1222
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
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
Reputation:
Cast o as a TextBlock, it's DataContext is your row's object. You can cast it as your object type.
Upvotes: 3
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