/// <summary> /// Constructor /// </summary> /// <param name="dialogAssemblyViewProvider"> An instance of a <see cref="DialogAssemblyViewProvider"/> used to resolve views for the direct dialog view models. </param> /// <param name="wrappingViewProvider"> The <see cref="WrappingViewProvider"/>s used to resolve views for content view models. </param> /// <param name="attachToViewProviderEvent"> Flag if an event handler should be attached to the <see cref="WrappingViewProvider.ViewLoaded"/>event of <paramref name="wrappingViewProvider"/>. </param> private DialogManager(DialogAssemblyViewProvider dialogAssemblyViewProvider, WrappingViewProvider wrappingViewProvider, bool attachToViewProviderEvent) { // Save parameters. _dialogAssemblyViewProvider = dialogAssemblyViewProvider ?? throw new ArgumentNullException(nameof(dialogAssemblyViewProvider)); // Initialize fields. _isInitialized = 0; // If the wrapper does not contain any elements, that create one containing a default view provider. if (!wrappingViewProvider.Any()) { wrappingViewProvider = new WrappingViewProvider(new IViewProvider[] { new DefaultViewProvider() }); } _wrappingViewProvider = wrappingViewProvider; // Attach to the view providers view loaded event. if (attachToViewProviderEvent) { _wrappingViewProvider.ViewLoaded += this.NewViewLoaded; } // Build all necessary dialog handlers. var dialogHandlers = DialogManager.GetDialogHandlers(_dialogAssemblyViewProvider); _dialogHandlers = new DialogHandlers(dialogHandlers); }
/// <summary> /// Creates <see cref="DialogHandler"/>s for every member in <see cref="DialogDisplayLocation"/>. /// </summary> /// <param name="dialogAssemblyViewProvider"> An instance of a <see cref="DialogAssemblyViewProvider"/> used to resolve views for the direct dialog view models. </param> /// <returns> A collection of <see cref="DialogHandler"/>s. </returns> private static DialogHandler[] GetDialogHandlers(DialogAssemblyViewProvider dialogAssemblyViewProvider) { return(Enum .GetValues(typeof(DialogDisplayLocation)) .Cast <DialogDisplayLocation>() .Select(displayLocation => DialogManager.CreateDialogHandler(displayLocation, dialogAssemblyViewProvider)) .ToArray() ); }
/// <summary> /// Constructor /// </summary> /// <param name="displayLocation"> The <see cref="DialogDisplayLocation"/> of this <see cref="DialogHandler"/>. </param> /// <param name="dialogViewProvider"> <see cref="DialogAssemblyViewProvider"/> used to obtain the proper view for an <see cref="IDialogContainerViewModel"/>. </param> public DialogHandler ( DialogDisplayLocation displayLocation, DialogAssemblyViewProvider dialogViewProvider ) { // Save parameters. this.DisplayLocation = displayLocation; _containerViewModel = new DialogContainerViewModel(); // Initialize fields. _containerView = dialogViewProvider.GetViewInstance(_containerViewModel); _dialogs = new ConcurrentStack <Dialog>(); this.IsInitialized = false; }
/// <inheritdoc /> public DefaultDialogManager(DialogAssemblyViewProvider dialogAssemblyViewProvider, params IViewProvider[] viewProviders) : base(dialogAssemblyViewProvider, viewProviders) { lock (DefaultDialogManager.Lock) { if (DefaultDialogManager.MainWindow is null) { void HandleMainWindowAvailable(object sender, EventArgs args) { DefaultDialogManager.MainWindowAvailable -= HandleMainWindowAvailable; base.Initialize(DefaultDialogManager.MainWindow); } DefaultDialogManager.MainWindowAvailable += HandleMainWindowAvailable; } else { base.Initialize(DefaultDialogManager.MainWindow); } } }
/// <summary> /// Constructor /// </summary> /// <param name="dialogAssemblyViewProvider"> An instance of a <see cref="DialogAssemblyViewProvider"/> used to resolve views for the direct dialog view models. </param> /// <param name="viewProviders"> Optional <see cref="IViewProvider"/>s used to resolve views for content view models. Default is only a <see cref="DefaultViewProvider"/>. </param> public DialogManager(DialogAssemblyViewProvider dialogAssemblyViewProvider, params IViewProvider[] viewProviders) : this(dialogAssemblyViewProvider, new WrappingViewProvider(viewProviders), true) { }
/// <summary> /// Creates a new instance of a <see cref="DialogHandler"/> based on <paramref name="displayLocation"/>. /// </summary> /// <param name="displayLocation"> The <see cref="DialogDisplayLocation"/> used later on to identify the <see cref="DialogHandler"/>. </param> /// <param name="dialogAssemblyViewProvider"> An instance of a <see cref="DialogAssemblyViewProvider"/> used to resolve views for the direct dialog view models. </param> /// <returns> A new <see cref="DialogHandler"/> instance. </returns> private static DialogHandler CreateDialogHandler(DialogDisplayLocation displayLocation, DialogAssemblyViewProvider dialogAssemblyViewProvider) { return(new DialogHandler(displayLocation, dialogAssemblyViewProvider)); }