/// <summary>
        /// Build up a Uri string based on the <see cref="NavigationSettings"/> argument,
        /// assign it a navigation id and store as a key value pair in the navigation settings list.
        /// Then navigate to that view using the navigation id.
        /// </summary>
        /// <param name="navigationSettings">
        /// <see cref="NavigationSettings"/> contains information about the target view
        /// such as the view type, view title, parameters and navigation history.
        /// </param>
        public void NavigateDocumentRegion(NavigationSettings navigationSettings)
        {
            if (navigationSettings == null)
            {
                throw new ArgumentNullException(nameof(navigationSettings));
            }

            if (String.IsNullOrEmpty(navigationSettings.View))
            {
                throw new ArgumentNullException($"{nameof(navigationSettings)}.View");
            }

            var query = new NavigationParameters
            {
                { "Title", navigationSettings.Title ?? navigationSettings.View },
                { "Navigation", navigationSettings.NavigationHistory ?? String.Empty }
            };

            string partialUri = navigationSettings.View + query.ToString();

            navigationSettings.PartialQuery = partialUri;
            var    navigationSettingsClone = (NavigationSettings)navigationSettings.Clone();
            string navigationId            = String.Empty;

            lock (lockNavigationList)
            {
                var existingNavigationSetting = navigationSettingsList.Values.FirstOrDefault(
                    ns => ns.PartialQuery.Equals(partialUri, StringComparison.Ordinal) &&
                    (ns.Data == null || ns.Data.Equals(navigationSettings.Data)));
                if (existingNavigationSetting != null)
                {
                    navigationId = existingNavigationSetting.NavigationId;
                }
                else
                {
                    navigationId = GetNewNavigationSettingsListKey();
                    query.Add("NavigationId", navigationId);
                    var viewUri = navigationSettings.View + query.ToString();
                    navigationSettingsClone.NavigationId = navigationId;
                    navigationSettingsClone.ViewQuery    = viewUri;
                    navigationSettingsList.Add(navigationId, navigationSettingsClone);
                }
            }

            NavigateDocumentRegion(navigationId);
        }
        /// <summary>
        /// Build up a Uri string based on the <see cref="NavigationSettings"/> argument,
        /// assign it a navigation id and store as a key value pair in the navigation settings list.
        /// Then navigate to that view using the navigation id.
        /// </summary>
        /// <param name="navigationSettings">
        /// <see cref="NavigationSettings"/> contains information about the target view
        /// such as the view type, view title, parameters and navigation history.
        /// </param>
        public void NavigateDocumentRegion(NavigationSettings navigationSettings)
        {
            if (String.IsNullOrEmpty(navigationSettings.View))
            {
                throw new Exception("Navigation Manager Exception : Target view not specified.");
            }

            var query = new NavigationParameters();

            query.Add("Title", navigationSettings.Title ?? navigationSettings.View);
            query.Add("Navigation", navigationSettings.NavigationHistory ?? String.Empty);

            string partialUri = navigationSettings.View + query.ToString();

            navigationSettings.PartialUri = partialUri;
            var    navigationSettingsClone = (NavigationSettings)navigationSettings.Clone();
            string navigationId            = String.Empty;

            lock (lockNavigationList)
            {
                var existingNavigationSetting = navigationSettingsList.Values.FirstOrDefault(
                    ns => ns.PartialUri.Equals(partialUri) &&
                    (ns.Data == null || ns.Data.Equals(navigationSettings.Data)));
                if (existingNavigationSetting != null)
                {
                    navigationId = existingNavigationSetting.NavigationId;
                }
                else
                {
                    navigationId = GetNewNavigationSettingsListKey();
                    query.Add("NavigationId", navigationId);
                    var viewUri = navigationSettings.View + query.ToString();
                    navigationSettingsClone.NavigationId = navigationId;
                    navigationSettingsClone.ViewUri      = viewUri;
                    navigationSettingsList.Add(navigationId, navigationSettingsClone);
                }
            }

            NavigateDocumentRegion(navigationId);
        }