public TaskDetailsViewModel(NavigationTarget target) { if (target is TaskDetailsTarget) { LoadData((target as TaskDetailsTarget).TaskId); } if (target is CommentTarget) { LoadData((target as CommentTarget).TaskId); _selectedComment = Comments.FirstOrDefault(x => x.Id == (target as CommentTarget).CommentId); } }
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); var url = e.Parameter + ""; Target = Router.Current.CreateTarget(url); if (((Frame)Window.Current.Content).CanGoBack) { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; } else { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; } }
public string CreateUrl(NavigationTarget target) { var route = FindRoute(target); var url = Scheme + route.UrlPattern; var props = target.GetType().GetPropertiesHierarchical(); var routeVars = route.Segments.Where(x => x.IsVariable).Select(x => x.Name.ToLowerInvariant()); foreach (var prop in props) { var value = Uri.EscapeDataString(prop.GetValue(target) + ""); if (routeVars.Contains(prop.Name.ToLowerInvariant())) { url = url.Replace("{" + prop.Name.ToLowerInvariant() + "}", value); } else if (prop.PropertyType == typeof(string) || prop.PropertyType.GetTypeInfo().IsValueType) { url += url.Contains("?") ? "&" : "?"; url += prop.Name.ToLowerInvariant() + "=" + value; } } return url; }
public Route FindRoute(NavigationTarget target) { var route = _routes.FirstOrDefault(x => x.TargetType == target.GetType()); if (route == null) { throw new Exception("No route for NavigationTarget: " + target.GetType().Name); } return route; }
protected override void Navigate(Route route, NavigationTarget target, string uri) { ContentFrame.Navigate(route.PageType, uri); }
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); var url = e.Parameter + ""; Target = Router.Current.CreateTarget(url); }