/// <summary>
        /// Creates a window in non-modal state. If a window with the specified viewModelType exists, the window is activated instead of being created.
        /// </summary>
        /// <param name="uiVisualizerService">The UI visualizer service.</param>
        /// <typeparam name="TViewModel">The type of the view model.</typeparam>
        /// <param name="model">The model to be injected into the view model, can be <c>null</c>.</param>
        /// <param name="completedProc">The completed proc. Not applicable if window already exists.</param>
        /// <returns><c>true</c> if shown or activated successfully, <c>false</c> otherwise.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="uiVisualizerService" /> is <c>null</c>.</exception>
        public static Task <bool?> ShowOrActivateAsync <TViewModel>(this IUIVisualizerService uiVisualizerService, object model = null, EventHandler <UICompletedEventArgs> completedProc = null)
            where TViewModel : IViewModel
        {
            Argument.IsNotNull("uiVisualizerService", uiVisualizerService);

            var dependencyResolver = uiVisualizerService.GetDependencyResolver();

            var viewModelManager = dependencyResolver.Resolve <IViewModelManager>();
            var viewModel        = viewModelManager.GetFirstOrDefaultInstance(typeof(TViewModel));

            if (viewModel == null)
            {
                var viewModelFactory = GetViewModelFactory(uiVisualizerService);
                var vm = viewModelFactory.CreateViewModel(typeof(TViewModel), model);
                return(uiVisualizerService.ShowAsync(vm, completedProc));
            }

            var viewLocator = dependencyResolver.Resolve <IViewLocator>();
            var viewType    = viewLocator.ResolveView(viewModel.GetType());
            var viewManager = dependencyResolver.Resolve <IViewManager>();
            var view        = viewManager.GetFirstOrDefaultInstance(viewType);
            var window      = view as System.Windows.Window;

            if (view == null || window == null)
            {
                return(uiVisualizerService.ShowAsync(viewModel, completedProc));
            }

            var activated = ActivateWindow(window);

            return(TaskHelper <bool?> .FromResult(activated));
        }
예제 #2
0
        private static IViewModelFactory GetViewModelFactory(IUIVisualizerService uiVisualizerService)
        {
            var dependencyResolver = uiVisualizerService.GetDependencyResolver();
            var viewModelFactory   = dependencyResolver.Resolve <IViewModelFactory>();

            return(viewModelFactory);
        }
예제 #3
0
        /// <summary>
        /// Creates a window in non-modal state. If a window with the specified viewModelType exists, the window is activated instead of being created.
        /// </summary>
        /// <typeparam name="TViewModel">The view model type.</typeparam>
        /// <param name="uiVisualizerService">The uiVisualizerService</param>
        /// <param name="dataContext">The data context.</param>
        /// <param name="scope">The scope.</param>
        /// <returns>
        /// A task.
        /// </returns>
        public static async Task ShowOrActivateAsync <TViewModel>(this IUIVisualizerService uiVisualizerService, object dataContext = null, object scope = null)
            where TViewModel : IViewModel
        {
            var dependencyResolver = uiVisualizerService.GetDependencyResolver();
            var viewModelManager   = dependencyResolver.Resolve <IViewModelManager>();
            var viewModelFactory   = dependencyResolver.Resolve <IViewModelFactory>();

            var existingViewModel = viewModelManager.GetFirstOrDefaultInstance <TViewModel>();

            if (existingViewModel != null)
            {
                await uiVisualizerService.ShowOrActivateAsync <TViewModel>(dataContext, scope);
            }
            else
            {
                var vm = viewModelFactory.CreateViewModel(typeof(TViewModel), dataContext, scope);
                await uiVisualizerService.ShowAsync(vm);
            }
        }