/// <summary>
 /// Shows the selected view.
 /// </summary>
 /// <param name="request">The request which indicates which view to show.</param>
 private void ShowView(ShowViewRequest request)
 {
     Action action = () => ShowViewInternal(request);
     if (DispatcherContext.IsSynchronized)
     {
         action();
     }
     else
     {
         DispatcherContext.Invoke(action);
     }
 }
        /// <summary>
        /// Shows the selected view.
        /// </summary>
        /// <param name="request">The request which indicates which view to show.</param>
        private void ShowView(ShowViewRequest request)
        {
            Action action = () => ShowViewInternal(request);

            if (DispatcherContext.IsSynchronized)
            {
                action();
            }
            else
            {
                DispatcherContext.Invoke(action);
            }
        }
        private void ShowViewInternal(ShowViewRequest request)
        {
            var region = null as IRegion;
            var regionManager = request.RegionManager ?? MainRegionManager;

            // If the view already exists, re-activate it instead - this way we only resolve and initialise
            // the presenter if we actually need it.
            if (regionManager.Regions.ContainsRegionWithName(request.RegionName))
            {
                region = regionManager.Regions[request.RegionName];
                if (region.HasViewByParameter(request.Parameter))
                {
                    region.ActivateByParameter(request.Parameter);
                    return;
                }
            }

            var presenter = (IPresenter)Container.Resolve(request.PresenterType);
            var view = Container.Resolve(presenter.ViewType);
            presenter.Initialize(view, request.Parameter);
            RegionManager.SetRegionManager((DependencyObject)view, regionManager);

            var viewWindow = view as Window;
            if (viewWindow != null)
            {
                Action showWindow =
                    () =>
                    {
                        var mainWindow = Application.Current.MainWindow;
                        if (!ReferenceEquals(mainWindow, viewWindow))
                        {
                            if (request.IsModal)
                            {
                                viewWindow.Owner = Application.Current.MainWindow;
                                viewWindow.ShowDialog();
                                viewWindow.Owner = null;
                            }
                            else
                            {
                                viewWindow.Show();
                            }
                        }
                        else
                        {
                            viewWindow.Show();
                        }
                    };
                if (viewWindow.Dispatcher.CheckAccess())
                {
                    showWindow();
                }
                else
                {
                    viewWindow.Dispatcher.Invoke(showWindow);
                }
            }
            else
            {
                if (region == null)
                {
                    throw new InvalidOperationException(
                        string.Format(
                            CultureInfo.InvariantCulture,
                            "The region '{0}' does not exist.",
                            request.RegionName));
                }

                region.AddAndActivateWithParameter(view, request.Parameter);
            }
        }
        private void ShowViewInternal(ShowViewRequest request)
        {
            var region        = null as IRegion;
            var regionManager = request.RegionManager ?? MainRegionManager;

            // If the view already exists, re-activate it instead - this way we only resolve and initialise
            // the presenter if we actually need it.
            if (regionManager.Regions.ContainsRegionWithName(request.RegionName))
            {
                region = regionManager.Regions[request.RegionName];
                if (region.HasViewByParameter(request.Parameter))
                {
                    region.ActivateByParameter(request.Parameter);
                    return;
                }
            }

            var presenter = (IPresenter)Container.Resolve(request.PresenterType);
            var view      = Container.Resolve(presenter.ViewType);

            presenter.Initialize(view, request.Parameter);
            RegionManager.SetRegionManager((DependencyObject)view, regionManager);

            var viewWindow = view as Window;

            if (viewWindow != null)
            {
                Action showWindow =
                    () =>
                {
                    var mainWindow = Application.Current.MainWindow;
                    if (!ReferenceEquals(mainWindow, viewWindow))
                    {
                        if (request.IsModal)
                        {
                            viewWindow.Owner = Application.Current.MainWindow;
                            viewWindow.ShowDialog();
                            viewWindow.Owner = null;
                        }
                        else
                        {
                            viewWindow.Show();
                        }
                    }
                    else
                    {
                        viewWindow.Show();
                    }
                };
                if (viewWindow.Dispatcher.CheckAccess())
                {
                    showWindow();
                }
                else
                {
                    viewWindow.Dispatcher.Invoke(showWindow);
                }
            }
            else
            {
                if (region == null)
                {
                    throw new InvalidOperationException(
                              string.Format(
                                  CultureInfo.InvariantCulture,
                                  "The region '{0}' does not exist.",
                                  request.RegionName));
                }

                region.AddAndActivateWithParameter(view, request.Parameter);
            }
        }