Example #1
0
        private static UiViewModelBase CreateViewModel(ChangeDisplayEventArgs changeDisplayEventArgs, Dictionary <Type, Type> dictionary,
                                                       Type viewModelInterface)
        {
            UiViewModelBase viewModel;

            if (dictionary.ContainsKey(viewModelInterface))
            {
                viewModel = (UiViewModelBase)Activator.CreateInstance(dictionary[changeDisplayEventArgs.ViewModelInterface]);
                viewModel.DisposeOfAfterUse = changeDisplayEventArgs.CreateNew;
            }
            else
            {
                var names = Assembly.GetExecutingAssembly().GetTypes().Select(i => i.Name);

#if DEBUG
                var countOfClasses = GetDerivedForInterfaceType(viewModelInterface).Count();
                if (countOfClasses == 0)
                {
                    throw new Exception($"Could not find a class that is derived from the interface {viewModelInterface.Name}");
                }
                else if (countOfClasses > 1)
                {
                    var classes = string.Join(", ", GetDerivedForInterfaceType(viewModelInterface).Select(i => i.Name));
                    throw new Exception($"Multiple classes found  derived from the interface {viewModelInterface.Name}: {classes}");
                }
#endif

                var displayViewModelClass = GetDerivedForInterfaceType(viewModelInterface).FirstOrDefault();

                viewModel = (UiViewModelBase)Activator.CreateInstance(displayViewModelClass);
                ChangeDisplayEventArgs.InterfaceTypeDictionary.Add(viewModelInterface, displayViewModelClass);
                viewModel.DisposeOfAfterUse = changeDisplayEventArgs.CreateNew;
            }
            return(viewModel);
        }
Example #2
0
        private void DisplayChangeEventHandler(object sender, ChangeDisplayEventArgs changeDisplayEventArgs)
        {
            //Should not be keeping (or using) previous display and disposing
            switch (changeDisplayEventArgs.DisplayActionType)
            {
            case DisplayActionTypes.PopPreviousDisplay:
                PrimaryViewModel = _primaryDisplayStack.Pop();
                return;

            case DisplayActionTypes.PushPreviousDisplay:
                _primaryDisplayStack.Push(PrimaryViewModel);
                break;
            }

            if (PrimaryViewModel.DisposeOfAfterUse && !(changeDisplayEventArgs.DisplayActionType == DisplayActionTypes.PushPreviousDisplay))
            {
                PrimaryViewModel.Cleanup();
            }
            PrimaryViewModel = changeDisplayEventArgs.ViewModel();
        }
Example #3
0
        public static UiViewModelBase ViewModel(this ChangeDisplayEventArgs changeDisplayEventArgs)
        {
            UiViewModelBase viewModel;
            var             viewModelInterface = changeDisplayEventArgs.ViewModelInterface;
            var             dictionary         = ChangeDisplayEventArgs.InterfaceTypeDictionary;

            if (changeDisplayEventArgs.CreateNew)
            {
                viewModel = CreateViewModel(changeDisplayEventArgs, dictionary, viewModelInterface);
            }
            else if (ClassLocator.ContainsCreated(changeDisplayEventArgs.ViewModelInterface))
            {
                viewModel = (UiViewModelBase)ClassLocator.GetInstance(changeDisplayEventArgs.ViewModelInterface);
            }
            else
            {
                viewModel = CreateViewModel(changeDisplayEventArgs, dictionary, viewModelInterface);
                ClassLocator.Register(() => viewModel);
            }
            return(viewModel);
        }