public AddCodeElement_ViewModel(AddCodeElementTask model) { _task = model; this.PropertyChanged += OnViewModelPropertyChanged; Model.PropertyChanged += OnModelPropertyChanged; }
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()); }