// Remove a handler to the named property (empty means "any property") private void PrivateRemoveHandler(Type type, EventHandler <PropertyChangedEventArgs> handler, string propertyName) { Debug.Assert(handler != null && type != null && propertyName != null, "Handler, type, and propertyName of event cannot be null"); using (WriteLock) { TypeRecord tr = (TypeRecord)this[type]; if (tr != null) { tr.RemoveHandler(handler, propertyName); if (tr.IsEmpty) { tr.StopListening(); Remove(tr.Type); } } } }