internal void NavigateToView(ILogicWithViewModel <IViewModel> logic, StateManager stateManager, bool isModal = false) { IViewModel view = logic.ViewModel; view.Visible = true; if (!LoadedViews.Any(x => x.UniqueID == view.UniqueID)) { _viewsDelta.AddNewView(view, isModal); if (isModal) { ModalViews.Add(view.UniqueID); } LoadedViews.Add(new ViewInfo { UniqueID = view.UniqueID, Visible = view.Visible, ZOrder = 0 }); // Added to support promises in the first request(SKS Demo Splash) // The view is created but is not sent to the client because it is not loaded by the first request // Therefore the navigateToView requires to send the view's viewmodel completely. stateManager.Tracker.DetachModel(view); stateManager.Tracker.MarkAllAsModified(view); stateManager.AddInCache(view.UniqueID, view, true); // Lets fire the load event //Load can have no parameters or some parameters InvokeLifeCycleStartup(logic); } else { var currentView = LoadedViews.FirstOrDefault(v => v.UniqueID == view.UniqueID); currentView.Visible = view.Visible; currentView.ZOrder = 0; } stateManager.Tracker.MarkAsModified(this, "LoadedViews"); }
/// <summary> /// Disposes the view bound to the given <c>ILogicView</c> object. /// </summary> /// <param name="logic">The <c>ILogicView</c> object bound to the view to dispose.</param> internal void DisposeView(ILogicWithViewModel <IViewModel> logic) { IViewModel view = logic.ViewModel; int count = LoadedViews.RemoveAll(x => x.UniqueID == view.UniqueID); _viewsDelta.RemoveView(view); var stateManager = StateManager.Current; stateManager.RemoveObject(view.UniqueID, true, isDispose: true, formBaseVM: view as UpgradeHelpers.Helpers.FormBaseViewModel); stateManager.Tracker.MarkAsModified(this, "LoadedViews"); ModalViews.Remove(view.UniqueID); Debug.Assert(count <= 1, "Exactly one view must be removed"); }