private Page GetNavigationPageFromProvider(Page sourceView, Page targetView) { INavigationPageProvider provider = null; Type viewType = targetView.GetType(); if (_navigationProviderCache.ContainsKey(viewType)) { provider = _navigationProviderCache[viewType]; } else { var navigationPageProvider = viewType.GetTypeInfo().GetCustomAttribute <NavigationPageProviderAttribute>(true); if (navigationPageProvider != null) { provider = ServiceLocator.Current.GetInstance(navigationPageProvider.Type) as INavigationPageProvider; if (provider == null) { throw new InvalidCastException("Could not create the navigation page provider. Please make sure the navigation page provider implements the INavigationPageProvider interface."); } } } if (!_navigationProviderCache.ContainsKey(viewType)) { _navigationProviderCache.Add(viewType, provider); } if (provider != null) { return(provider.CreatePageForNavigation(sourceView, targetView)); } return(null); }
public void Add( IEnumerable <string> path, INavigationPageProvider provider) { var findResult = FindNode(path, null); findResult.TraversedPath.LastPathComponent.CreateNodes(findResult.PathTail, provider); }
private void CreateNodes( IEnumerable <string> path, INavigationPageProvider provider) { var pathComponent = path.FirstOrDefault(); switch (pathComponent) { case null: if (Provider != null) { throw new ApplicationException( "Провайдер страниц навигации с данной маской уже существует."); } Provider = provider; break; case "*": if (path.Skip(1).Any()) { throw new ApplicationException( "Компонент маски пути '*' поддерживается только в качестве последнего элемента пути."); } if (ChildrensProvider != null) { throw new ApplicationException( "Провайдер страниц навигации с данной маской уже существует."); } ChildrensProvider = provider; break; default: var subNode = new NavigationPageProviderHierarchy(); _childrens.Add(pathComponent, subNode); subNode.CreateNodes(path.Skip(1), provider); break; } }
private void CreateNodes( IEnumerable<string> path, INavigationPageProvider provider) { var pathArray = path.ToArray(); var pathComponent = pathArray.FirstOrDefault(); switch (pathComponent) { case null: if (Provider != null) throw new ApplicationException( "Провайдер страниц навигации с данной маской уже существует."); Provider = provider; break; case "*": if (pathArray.Skip(1).Any()) throw new ApplicationException( "Компонент маски пути '*' поддерживается только в качестве последнего элемента пути."); if (ChildrensProvider != null) throw new ApplicationException( "Провайдер страниц навигации с данной маской уже существует."); ChildrensProvider = provider; break; default: var subNode = new NavigationPageProviderHierarchy(); Debug.Assert(pathComponent != null, "pathComponent != null"); _childrens.Add(pathComponent, subNode); subNode.CreateNodes(pathArray.Skip(1), provider); break; } }
public void Add( IEnumerable<string> path, INavigationPageProvider provider) { var findResult = FindNode(path, null); findResult.TraversedPath.LastPathComponent.CreateNodes(findResult.PathTail, provider); }