///-------------------------------------------------------------------------------- /// <summary>This method refreshes the view model.</summary> /// /// <param name="refreshChildren">Flag indicating whether children should be refreshed.</param> ///-------------------------------------------------------------------------------- public void Refresh(bool refreshChildren, int refreshLevel = 0) { if (refreshChildren == true || refreshLevel > 0) { EnumerationsFolder.Refresh(refreshChildren, refreshLevel - 1); ModelObjectsFolder.Refresh(refreshChildren, refreshLevel - 1); } #region protected if (refreshChildren == true || refreshLevel > 0) { ModelDataFolder.Refresh(refreshChildren, refreshLevel - 1); } #endregion protected HasErrors = !Model.IsValid; HasCustomizations = Model.IsAutoUpdated == false || Model.IsEmptyMetadata(Model.ForwardInstance) == false || ChildrenHaveAnyCustomizations(); if (HasCustomizations == false && Model.ReverseInstance != null) { // remove customizations if solely due to child customizations no longer present Model.IsAutoUpdated = true; Model.SpecSourceName = Model.ReverseInstance.SpecSourceName; Model.ResetModified(Model.ReverseInstance.IsModified); Model.ResetLoaded(Model.ReverseInstance.IsLoaded); if (!Model.IsIdenticalMetadata(Model.ReverseInstance)) { HasCustomizations = true; Model.IsAutoUpdated = false; } } if (HasCustomizations == false) { // clear customizations Model.ForwardInstance = null; Model.ReverseInstance = null; Model.IsAutoUpdated = true; } if (EnumerationsFolder.HasErrors == true) { HasErrors = true; } if (ModelObjectsFolder.HasErrors == true) { HasErrors = true; } OnPropertyChanged("Items"); OnPropertyChanged("HasCustomizations"); OnPropertyChanged("HasErrors"); }
///-------------------------------------------------------------------------------- /// <summary>This method disposes of resources in the view model.</summary> ///-------------------------------------------------------------------------------- protected override void OnDispose() { if (EnumerationsFolder != null) { EnumerationsFolder.Updated -= Children_Updated; EnumerationsFolder.Dispose(); EnumerationsFolder = null; } if (ModelObjectsFolder != null) { ModelObjectsFolder.Updated -= Children_Updated; ModelObjectsFolder.Dispose(); ModelObjectsFolder = null; } if (_editModel != null) { Items.CollectionChanged -= Children_CollectionChanged; EditModel.PropertyChanged -= EditModel_PropertyChanged; EditModel = null; } Model = null; base.OnDispose(); }
///-------------------------------------------------------------------------------- /// <summary>This method returns the parent view model corresponding to /// the input message.</summary> /// /// <param name="data">The message data to find parent for.</param> ///-------------------------------------------------------------------------------- public EditWorkspaceViewModel FindParentViewModel(SolutionModelEventArgs data) { EditWorkspaceViewModel parentModel = null; parentModel = EnumerationsFolder.FindParentViewModel(data); if (parentModel != null) { return(parentModel); } parentModel = ModelObjectsFolder.FindParentViewModel(data); if (parentModel != null) { return(parentModel); } #region protected parentModel = ModelDataFolder.FindParentViewModel(data); if (parentModel != null) { return(parentModel); } #endregion protected return(null); }
///-------------------------------------------------------------------------------- /// <summary>This method updates the view model data and sends update command back /// to the solution builder.</summary> ///-------------------------------------------------------------------------------- protected override void OnUpdate() { // set up reverse engineering instance if not present if (Model.ReverseInstance == null && Model.IsAutoUpdated == true) { Model.ReverseInstance = new Model(); Model.ReverseInstance.TransformDataFromObject(Model, null, false); // perform the update of EditModel back to Model Model.TransformDataFromObject(EditModel, null, false); Model.IsAutoUpdated = false; } else if (Model.ReverseInstance != null) { EditModel.ResetModified(Model.ReverseInstance.IsModified); if (EditModel.Equals(Model.ReverseInstance)) { // perform the update of EditModel back to Model Model.TransformDataFromObject(EditModel, null, false); Model.IsAutoUpdated = true; } else { // perform the update of EditModel back to Model Model.TransformDataFromObject(EditModel, null, false); Model.IsAutoUpdated = false; } } else { // perform the update of EditModel back to Model Model.TransformDataFromObject(EditModel, null, false); Model.IsAutoUpdated = false; } Model.ForwardInstance = null; if (ModelNameCustomized || DescriptionCustomized || TagsCustomized) { Model.ForwardInstance = new Model(); Model.ForwardInstance.ModelID = EditModel.ModelID; Model.SpecSourceName = Model.DefaultSourceName; if (ModelNameCustomized) { Model.ForwardInstance.ModelName = EditModel.ModelName; } if (DescriptionCustomized) { Model.ForwardInstance.Description = EditModel.Description; } if (TagsCustomized) { Model.ForwardInstance.Tags = EditModel.Tags; } } EditModel.ResetModified(false); OnUpdated(this, null); // send update back to solution builder SendEditModelPerformed(); // send update for any updated Enumerations if (EnumerationsFolder != null && EnumerationsFolder.IsEdited == true) { EnumerationsFolder.Update(); } // send update for any updated ModelObjects if (ModelObjectsFolder != null && ModelObjectsFolder.IsEdited == true) { ModelObjectsFolder.Update(); } }