Handle DataGridHyperlinkColumn Click Event

datagrid, wpf

Solution

If you just want to navigate the browser to the link, it's a simple as writing a handler like this:

void EventSetter_OnHandler(object sender, RoutedEventArgs e)
{
  var destination = ((Hyperlink) e.OriginalSource).NavigateUri;
  Process.Start(destination.ToString());
}

If you instead want to take some custom action upon navigation, using information in the associated row, then you will need to access the data context of the hyperlink:

void EventSetter_OnHandler(object sender, RoutedEventArgs e)
{
  var rowData = ((Hyperlink) e.OriginalSource).DataContext as User;
  navigationService.NavigateToUserRecordForId(rowData.Id);
}

If you want to programatically create a hyperlink column, and bind to it's click event, you can do this:

var style = new Style(typeof(TextBlock));

style.Setters.Add(new EventSetter(Hyperlink.ClickEvent,     (RoutedEventHandler)EventSetter_OnHandler));

var column = new DataGridHyperlinkColumn { Header = "User", Binding = new Binding("ViewUserLink"), ElementStyle = style };

dataGrid1.Columns.Add(column);

This stack overflow answer also has good info on the WPF toolkit's Data GridHyperlinkColumn, well worth checking out.

Problem

How to handle click event of DataGridHyperlinkColumn programatically through code(in .xaml.cs file).

Original source

Related problems