void ObjectDestructed(BaseObject ob) { ob.Destructed -= ObjectDestructed; var movable = ob as MovableObject; if (movable != null) { movable.PropertyChanged -= MovablePropertyChanged; } var env = ob as EnvironmentObject; if (env != null) { m_environments.Remove(env); } m_rootObjects.Remove(ob); if (m_objects.Remove(ob) == false) { throw new Exception(); } #if TRACK_DESTRUCTED_OBJECTS m_destructedObjects.Add(ob); #endif }
void MovablePropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName != "Container") { return; } var ob = (MovableObject)sender; if (ob.Container == null) { if (m_rootObjects.Contains(ob)) { return; } m_rootObjects.Add(ob); } else { m_rootObjects.Remove(ob); } }