public AddCodeElement_ViewModel(AddCodeElementTask model)
        {
            _task = model;

            this.PropertyChanged  += OnViewModelPropertyChanged;
            Model.PropertyChanged += OnModelPropertyChanged;
        }
示例#2
0
        public void InitializeContent(CodeElementType ElementType)
        {
            RefreshModules();
            RefreshModuleHosts();
            RefreshUProjects();

            TaskData = null;
            AddCodeElement_ViewModel view_model = null;

            switch (ElementType)
            {
            case CodeElementType.Type:
                TaskData   = new AddTypeTask();
                view_model = new AddType_ViewModel(TaskData as AddTypeTask);
                break;

            case CodeElementType.Source:
                TaskData   = new AddSourceFileTask();
                view_model = new AddCodeElement_ViewModel(TaskData);
                break;

            case CodeElementType.Module:
                TaskData   = new AddModuleTask();
                view_model = new AddModule_ViewModel(TaskData as AddModuleTask);
                break;

            case CodeElementType.Plugin:
                TaskData   = new AddPluginTask();
                view_model = new AddCodeElement_ViewModel(TaskData);
                break;
            }

            TaskData.ElementType      = ElementType;
            TaskData.PropertyChanged += OnModelChanged;

            ElementTypeBox.DataContext = view_model;
            // @NOTE: Setting this also sets the DataContext to the same object
            AddElementPresenter.Content = view_model;

            // @TODO: Don't understand why, but if leaving the template selector applied in the xaml to choose the template,
            // then we can't access the instantiated template here (nor by explicitly calling ApplyTemplate, or delaying until later).
            var selector = new CodeElementTypeTemplateSelector();

            AddElementPresenter.ContentTemplate = selector.SelectTemplate(view_model, AddElementPresenter);
            AddElementPresenter.ApplyTemplate();

            var name_text_box = AddElementPresenter.ContentTemplate.FindName("ElementNameBox", AddElementPresenter) as FrameworkElement;

            if (name_text_box != null)
            {
                name_text_box.Focus();
            }
            //

            AddBtn.DataContext       = TaskData;
            AddFinishBtn.DataContext = TaskData;

            this.ContentUpdated?.Invoke(this, new EventArgs());
        }