示例#1
0
        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);
        }
示例#2
0
            public void Add(
                IEnumerable <string> path,
                INavigationPageProvider provider)
            {
                var findResult = FindNode(path, null);

                findResult.TraversedPath.LastPathComponent.CreateNodes(findResult.PathTail, provider);
            }
示例#3
0
            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);
			}