/// <summary>
        /// Deletes the EmbeddableElement view model that is hosting the given EmbeddableElement.
        /// </summary>
        /// <param name="element">EmbeddableElement.</param>
        public virtual void DeleteParent(global::Tum.PDE.ModelingDSL.EmbeddableElement element)
        {
			if( element == null )
				return;
				
			if( this.ParentVM != null )
				if( this.ParentVM.Element == element )
				{
					this.ViewModelStore.SpecificViewModelStore.RemoveVM(this.ParentVM, this.Id);
					if( !this.ViewModelStore.SpecificViewModelStore.IsVMInUse(this.ParentVM) )
						this.ParentVM.Dispose();
                    this.ParentVMHost = null;
				}
				
			OnPropertyChanged("ParentVM");				
        }		
		/// <summary>
        /// Clean up.
        /// </summary>
        protected override void OnDispose()
        {
			if( this.Element != null )
			{
            	this.EventManager.GetEvent<DslEditorViewModelEvents::ModelElementLinkAddedEvent>().Unsubscribe(this.Store.DomainDataDirectory.GetDomainRelationship(global::Tum.PDE.ModelingDSL.EmbeddingRelationship.DomainClassId),
                	true, this.Element.Id, new System.Action<DslModeling::ElementAddedEventArgs>(OnParentAdded));
            	this.EventManager.GetEvent<DslEditorViewModelEvents::ModelElementLinkDeletedEvent>().Unsubscribe(this.Store.DomainDataDirectory.GetDomainRelationship(global::Tum.PDE.ModelingDSL.EmbeddingRelationship.DomainClassId),
                	true, this.Element.Id, new System.Action<DslModeling::ElementDeletedEventArgs>(OnParentRemoved));
				this.EventManager.GetEvent<DslEditorViewModelEvents::ModelRolePlayerChangedEvent>().Unsubscribe(this.Store.DomainDataDirectory.GetDomainRole(global::Tum.PDE.ModelingDSL.EmbeddingRelationship.ChildDomainRoleId),
                	new System.Action<DslModeling::RolePlayerChangedEventArgs>(OnParentChanged));
				this.EventManager.GetEvent<DslEditorViewModelEvents::ModelRolePlayerChangedEvent>().Unsubscribe(this.Store.DomainDataDirectory.GetDomainRole(global::Tum.PDE.ModelingDSL.EmbeddingRelationship.ParentDomainRoleId),
                	new System.Action<DslModeling::RolePlayerChangedEventArgs>(OnParentChanged));
			
				if( this.ParentVM != null )
				{
					this.ViewModelStore.SpecificViewModelStore.RemoveVM(this.ParentVM, this.Id);
					if( !this.ViewModelStore.SpecificViewModelStore.IsVMInUse(this.ParentVM) )
						if( !this.ParentVM.IsDisposed && !this.ParentVM.IsDisposing )
							this.ParentVM.Dispose();
                	this.ParentVMHost = null;
				}
				
					
			}
		
            base.OnDispose();
        }
		/// <summary>
        /// Adds a new EmbeddableElement view model for the given EmbeddableElement.
        /// </summary>
		/// <param name="element">EmbeddableElement.</param>
        public virtual void AddParent(global::Tum.PDE.ModelingDSL.EmbeddableElement element)
        {
			if( element == null && !ShouldCreateVMForNullElements("Tum.PDE.ModelingDSL.EmbeddableElement"))
				return;
			if( this.ParentVM != null )
				if( this.ParentVM.Element == element )
					return;
			
			Tum.PDE.ModelingDSL.ViewModel.EmbeddableElementSpecificViewModel vm = null;
			if( element != null )
				vm= this.ViewModelStore.SpecificViewModelStore.TryGetVM("Tum.PDE.ModelingDSL.ViewModel.EmbeddableElementSpecificViewModel", element.Id) as Tum.PDE.ModelingDSL.ViewModel.EmbeddableElementSpecificViewModel;
			if( vm == null )
				vm = new Tum.PDE.ModelingDSL.ViewModel.EmbeddableElementSpecificViewModel(this.ViewModelStore, element, this);
			//this.ViewModelStore.SpecificViewModelStore.AddVM(vm, this.Id);
			
			this.ParentVMHost = vm;
					
				
			OnPropertyChanged("ParentVM");				
        }