コード例 #1
0
        /// <summary>
        /// Creates a new instance of the <see cref="UIView"/> class.
        /// </summary>
        /// <param name="uiPanel">The <see cref="UIPanel"/> which is creating the view.</param>
        /// <param name="uiPanelDefinition">The <see cref="UIPanelDefinition"/> that defines the view's containing panel.</param>
        /// <param name="vmfactory">A view model factory which is used to create the view's initial view model, or <see langword="null"/> to skip view model creation.</param>
        /// <returns>The instance of <see cref="UIView"/> that was created.</returns>
        public static UIView Create(UIPanel uiPanel, UIPanelDefinition uiPanelDefinition, UIViewModelFactory vmfactory)
        {
            Contract.Require(uiPanel, nameof(uiPanel));
            Contract.Require(uiPanelDefinition, nameof(uiPanelDefinition));

            var uv      = UltravioletContext.DemandCurrent();
            var factory = uv.TryGetFactoryMethod <UIViewFactory>();

            if (factory != null)
            {
                return(factory(uv, uiPanel, uiPanelDefinition, vmfactory));
            }

            return(null);
        }
コード例 #2
0
        /// <summary>
        /// Validates panel definitions that are being reloaded.
        /// </summary>
        private bool OnValidatingUIPanelDefinition(String path, UIPanelDefinition asset)
        {
            try
            {
                pendingView = CreateViewFromFromUIPanelDefinition(asset);

                return(true);
            }
            catch (Exception e)
            {
                pendingView = null;

                Debug.WriteLine(UltravioletStrings.ExceptionDuringViewReloading);
                Debug.WriteLine(e);

                return(false);
            }
        }
コード例 #3
0
        /// <summary>
        /// Reloads panel definitions.
        /// </summary>
        private void OnReloadingUIPanelDefinition(String path, UIPanelDefinition asset, Boolean validated)
        {
            if (validated)
            {
                if (State == UIPanelState.Open)
                {
                    var currentViewModel = View?.ViewModel;
                    var currentView      = View;
                    if (currentView != null)
                    {
                        currentView.OnClosing();
                        currentView.OnClosed();
                        UnloadView();
                    }

                    DefaultOpenTransitionDuration  = asset.DefaultOpenTransitionDuration;
                    DefaultCloseTransitionDuration = asset.DefaultCloseTransitionDuration;

                    FinishLoadingView(pendingView);
                    pendingView = null;

                    var updatedView = View;
                    if (updatedView != null)
                    {
                        if (currentViewModel != null)
                        {
                            updatedView.SetViewModel(currentViewModel);
                        }

                        updatedView.OnOpening();
                        updatedView.OnOpened();
                    }
                }
            }
            else
            {
                pendingView?.Dispose();
                pendingView = null;
            }
        }