public ITdiPage OpenTdiTab <TTab>(DialogViewModelBase master, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TTab : ITdiTab
        {
            var types  = new Type[] { };
            var values = new object[] { };

            return(OpenTdiTab <TTab>(master, types, values, options, addingRegistrations));
        }
        public IPage <TViewModel> OpenViewModelOnTdi <TViewModel>(ITdiTab master, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TViewModel : DialogViewModelBase
        {
            var types  = new Type[] { };
            var values = new object[] { };

            return(OpenViewModelOnTdiTypedArgs <TViewModel>(master, types, values, options, addingRegistrations));
        }
        protected IPage OpenViewModelInternal(IPage masterPage, OpenPageOptions options, Func <string> makeHash, Func <string, IPage> makePage)
        {
            string hash = null;

            if (!options.HasFlag(OpenPageOptions.IgnoreHash))
            {
                hash = makeHash();
            }

            IPage openPage = null;

            if (options.HasFlag(OpenPageOptions.AsSlave))
            {
                if (masterPage == null)
                {
                    throw new InvalidOperationException($"Отсутствует главная страница для добавляемой подчиненой страницы.");
                }

                if (hash != null)
                {
                    openPage = masterPage.SlavePagesAll.Select(x => x.SlavePage).FirstOrDefault(x => x.PageHash == hash);
                }
                if (openPage != null)
                {
                    SwitchOn(openPage);
                }
                else
                {
                    openPage = MakePageAndCatchAborting(makePage, hash);
                    if (openPage == null)
                    {
                        return(null);
                    }
                    (masterPage as IPageInternal).AddSlavePage(openPage);
                    OpenSlavePage(masterPage, openPage);
                }
            }
            else
            {
                if (hash != null)
                {
                    openPage = IndependentPages.FirstOrDefault(x => x.PageHash == hash);
                }
                if (openPage != null)
                {
                    SwitchOn(openPage);
                }
                else
                {
                    openPage = MakePageAndCatchAborting(makePage, hash);
                    if (openPage == null)
                    {
                        return(null);
                    }
                    OpenPage(masterPage, openPage);
                }
            }
            ViewModelOpened?.Invoke(this, new ViewModelOpenedEventArgs(openPage));
            return(openPage);
        }
 public ITdiPage OpenTdiTabNamedArgs <TTab>(DialogViewModelBase master, IDictionary <string, object> ctorArgs, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TTab : ITdiTab
 {
     return((ITdiPage)OpenViewModelInternal(
                FindPage(master), options,
                () => hashGenerator?.GetHashNamedArgs <TTab>(null, ctorArgs),
                (hash) => tdiPageFactory.CreateTdiPageNamedArgs <TTab>(ctorArgs, hash, addingRegistrations)
                ));
 }
 public ITdiPage OpenTdiTab <TTab>(DialogViewModelBase master, Type[] ctorTypes, object[] ctorValues, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TTab : ITdiTab
 {
     return((ITdiPage)OpenViewModelInternal(
                FindPage(master), options,
                () => hashGenerator?.GetHash <TTab>(null, ctorTypes, ctorValues),
                (hash) => tdiPageFactory.CreateTdiPageTypedArgs <TTab>(ctorTypes, ctorValues, hash, addingRegistrations)
                ));
 }
        public ITdiPage OpenTdiTabOnTdi <TTab, TCtorArg1, TCtorArg2>(ITdiTab masterTab, TCtorArg1 arg1, TCtorArg2 arg2, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TTab : ITdiTab
        {
            var types  = new Type[] { typeof(TCtorArg1), typeof(TCtorArg2) };
            var values = new object[] { arg1, arg2 };

            return(OpenTdiTabOnTdi <TTab>(masterTab, types, values, options, addingRegistrations));
        }
 public IPage <TViewModel> OpenViewModelOnTdiTypedArgs <TViewModel>(ITdiTab master, Type[] ctorTypes, object[] ctorValues, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TViewModel : DialogViewModelBase
 {
     return((IPage <TViewModel>)OpenViewModelInternal(
                FindOrCreatePage(master), options,
                () => hashGenerator?.GetHash <TViewModel>(null, ctorTypes, ctorValues),
                (hash) => viewModelsFactory.CreateViewModelTypedArgs <TViewModel>(null, ctorTypes, ctorValues, hash, addingRegistrations)
                ));
 }
 public IPage <TViewModel> OpenViewModelNamedArgs <TViewModel>(DialogViewModelBase master, IDictionary <string, object> ctorArgs, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TViewModel : DialogViewModelBase
 {
     return((IPage <TViewModel>)OpenViewModelInternal(
                FindPage(master), options,
                () => hashGenerator?.GetHashNamedArgs <TViewModel>(master, ctorArgs),
                (hash) => GetPageFactory <TViewModel>().CreateViewModelNamedArgs <TViewModel>(master, ctorArgs, hash, addingRegistrations)
                ));
 }
        public IPage <TViewModel> OpenViewModel <TViewModel, TCtorArg1, TCtorArg2, TCtorArg3>(DialogViewModelBase master, TCtorArg1 arg1, TCtorArg2 arg2, TCtorArg3 arg3, OpenPageOptions options = OpenPageOptions.None, Action <ContainerBuilder> addingRegistrations = null) where TViewModel : DialogViewModelBase
        {
            var types  = new Type[] { typeof(TCtorArg1), typeof(TCtorArg2), typeof(TCtorArg3) };
            var values = new object[] { arg1, arg2, arg3 };

            return(OpenViewModelTypedArgs <TViewModel>(master, types, values, options, addingRegistrations));
        }