public static void DisconnectEventFromIObservableList(IObservableList aList, object aObject) { if ((aList == null) || (aObject == null)) { return; } if (aObject is INotifyPropertyChanged) { (aObject as INotifyPropertyChanged).PropertyChanged -= aList.GetDefaultNotifyPropertyChangedHandler(); } else { // Disconnect from all PropertyChangedEventHandler properties foreach (EventInfo ev in aObject.GetType().GetEvents()) { if (ev.EventHandlerType is PropertyChangedEventHandler) { ev.RemoveEventHandler(aObject, aList.GetDefaultNotifyPropertyChangedHandler()); } } } }