private void OnNavigateLink(object sender, ExecutedRoutedEventArgs e) { if (this.LinkNavigator != null) { Uri uri; string parameter; string targetName; if (NavigationHelper.TryParseUriWithParameters(e.Parameter, out uri, out parameter, out targetName)) { this.LinkNavigator.Navigate(uri, e.Source as FrameworkElement, parameter); } } }
private void OnCanNavigateLink(object sender, CanExecuteRoutedEventArgs e) { // true by default e.CanExecute = true; if (this.LinkNavigator != null && this.LinkNavigator.Commands != null) { // in case of command uri, check if ICommand.CanExecute is true Uri uri; string parameter; string targetName; // TODO: CanNavigate is invoked a lot, which means a lot of parsing. need improvements?? if (NavigationHelper.TryParseUriWithParameters(e.Parameter, out uri, out parameter, out targetName)) { ICommand command; if (this.LinkNavigator.Commands.TryGetValue(uri, out command)) { e.CanExecute = command.CanExecute(parameter); } } } }