/// <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); }
/// <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); } }
/// <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; } }