/// <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); }