private void CloseViewInternal(CloseViewRequest request) { var region = null as IRegion; var regionManager = request.RegionManager ?? MainRegionManager; // Only deactivate the view if it exists if (regionManager.Regions.ContainsRegionWithName(request.RegionName)) { region = regionManager.Regions[request.RegionName]; if (region.HasViewByParameter(request.Parameter)) { var view = region.GetViewByParameter(request.Parameter); var viewWindow = view as Window; if (viewWindow != null) { viewWindow.Close(); } else { if (region == null) { throw new InvalidOperationException( string.Format( CultureInfo.InvariantCulture, "The region '{0}' does not exist.", request.RegionName)); } region.Remove(view); } } } }
/// <summary> /// Closes the selected view. /// </summary> /// <param name="request">The request which indicates which view to close.</param> private void CloseView(CloseViewRequest request) { Action action = () => CloseViewInternal(request); if (DispatcherContext.IsSynchronized) { action(); } else { DispatcherContext.Invoke(action); } }