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