protected virtual void fireChange(T oldValue, T newValue) { if (_OnUpdate != null) { List <Exception> exceptions = null; foreach (Delegate d in _OnUpdate.GetInvocationList()) { try { (d as ValueChange <T>).Invoke(this, oldValue, newValue); } catch (Exception e) { if (exceptions == null) { exceptions = new List <Exception>(); } exceptions.Add(e); } } if (exceptions != null) { throw new AggregateException("There were exceptions while firing " + name + "'s change event.", exceptions); } } }