/// <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()
            );
 }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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));
 }