public static void RegisterVertexChangeListeners(IVertex PlatformClassVertex, VertexChange action, string[] watchList) { PlatformClassVertexChangeListener listener = new PlatformClassVertexChangeListener(watchList); listener.PlatformClassVertex = PlatformClassVertex; listener.Change += action; PlatformClassVertex.Change += new VertexChange(listener.Listener); IVertex AttributeVertexes = PlatformClassVertex.GetAll(@"$Is:{$Inherits:$PlatformClass}\Selector:"); foreach (IEdge e in AttributeVertexes) { foreach (IEdge ee in PlatformClassVertex.GetAll(e.To.Value + ":")) { GraphUtil.AddHandlerIfDelegateListDoesNotContainsIt(ee.To, listener.Listener); foreach (string metaFromWatchList in listener.WatchList) { if (GeneralUtil.CompareStrings(ee.Meta.Value, metaFromWatchList)) { foreach (IEdge eee in ee.To) { GraphUtil.AddHandlerIfDelegateListDoesNotContainsIt(eee.To, listener.Listener); } } } } } }
private static void RemoveVertexChangeListeners_ForVertex(IVertex Vertex, IVertex PlatformClassVertex, VertexChange action) { Delegate[] delegates = Vertex.GetChangeDelegateInvocationList(); if (delegates != null) { foreach (Delegate d in delegates) { if (d.Target is PlatformClassVertexChangeListener) { PlatformClassVertexChangeListener list = (PlatformClassVertexChangeListener)d.Target; if (list.PlatformClassVertex == PlatformClassVertex) { list.Change -= action; Vertex.Change -= list.Listener; } } } } }