/// <summary> /// Initializes a new instance of the <see cref="ElementCollection"/> class. /// </summary> /// <param name="owner">The parent of this collection.</param> public ElementCollection(IElementParent owner) { this.owner = owner; if (owner is ElementBase e) { this.composite = new ObservableComposite <IList <Vertex> >(MakeVerticesObservable(e)); } else { this.composite = new ObservableComposite <IList <Vertex> >(Observable.Never <IList <Vertex> >()); } }
/// <inheritdoc /> public void Add(ElementBase element) { if (element.Parent != null) { throw new ArgumentException("Can't add element that already has a parent"); } element.Parent = this.owner; if (element is IElementParent parent) { composite.Add(parent.SubElements.composite); removalCallbacks.Add(element, parent.SubElements.composite.Remove); } else { var leaf = new ObservableComposite <IList <Vertex> >(MakeVerticesObservable(element)); composite.Add(leaf); removalCallbacks.Add(element, leaf.Remove); } }