// Attach and detach for Colleague registration
 public void Attach(MediatorColleague mc)
 {
     // Before we add, need to check to see if other MC's need updating.
     // This is a key part of the SnapViewDirector "mediator" role - to coordinate its Colleagues.
     updateExistingMC(mc);
     
     mcList.AddLast(mc);
 }
        public void Detach(MediatorColleague mc)
        {
            // Before we detach, need to update other MC's (e.g., a removed Constraint invalidates stat MC's)
            // This is a key part of the SnapViewDirector "mediator" role - to coordinate its Colleagues.
            updateExistingMC(mc);

            mcList.Remove(mc);
            // Need exception for trying to remove something that isn't there
        }
 // Update existing MC's depending on what is about to be attached
 void updateExistingMC(MediatorColleague mc_change)
 {
     // If this is a filter or constraint - every MC gets set to "inValid" (subject to local overrides)
     // [Note: I may well end up putting every MC type in here - in which case change it]
     if (mc_change is FilterMC || mc_change is ConstraintMC)
     {
         foreach (MediatorColleague mc_other in mcList)
         {
             mc_other.isValid = false;
         }
     }
 }