/// <summary> /// Gets called when the model element gets deleted /// </summary> /// <param name="e">The event data</param> protected virtual void OnDeleted(UriChangedEventArgs e) { foreach (var child in Children.Reverse()) { var childME = child as ModelElement; if (childME != null) { Uri oldChildUri = null; if (e.OldUri != null) { var uriBuilder = new UriBuilder(e.OldUri); uriBuilder.Fragment = uriBuilder.Fragment.Substring(1) + '/' + childME.CreateUriWithFragment(null, false, this).OriginalString; oldChildUri = uriBuilder.Uri; } var args = new UriChangedEventArgs(oldChildUri); childME.OnDeleting(args); childME.OnDeleted(args); } } Deleted?.Invoke(this, e); UnsetFlag(ModelElementFlag.Deleting); }
/// <summary> /// Deletes the current model element /// </summary> public virtual void Delete() { if (!IsFlagSet(ModelElementFlag.Deleting)) { SetFlag(ModelElementFlag.Deleting); // do not create event args when nobody listens if (IsFlagSet(ModelElementFlag.RaiseBubbledChanges) || Deleted != null || Deleting != null) { Uri originalAbsoluteUri = null; if (IsFlagSet(ModelElementFlag.RequireUris)) { originalAbsoluteUri = AbsoluteUri; } var e = new UriChangedEventArgs(originalAbsoluteUri); OnDeleting(e); OnDeleted(e); // only bubble deletion for deleted root OnBubbledChange(BubbledChangeEventArgs.ElementDeleted(this, e)); } SetParent(null); } }
/// <summary> /// Gets called before the model element gets deleted /// </summary> /// <param name="e"></param> protected virtual void OnDeleting(UriChangedEventArgs e) { Deleting?.Invoke(this, e); }