/// <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)); }
private static IViewModelFactory GetViewModelFactory(IUIVisualizerService uiVisualizerService) { var dependencyResolver = uiVisualizerService.GetDependencyResolver(); var viewModelFactory = dependencyResolver.Resolve <IViewModelFactory>(); return(viewModelFactory); }
/// <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); } }