/// <summary> /// Adds a weak event listener for a PropertyChanged event. /// </summary> /// <param name="source">The source of the event.</param> /// <param name="handler">The event handler.</param> /// <exception cref="ArgumentNullException">source must not be <c>null</c>.</exception> /// <exception cref="ArgumentNullException">handler must not be <c>null</c>.</exception> protected void AddWeakEventListener(INotifyPropertyChanged source, PropertyChangedEventHandler handler) { if (source == null) { throw new ArgumentNullException("source"); } if (handler == null) { throw new ArgumentNullException("handler"); } PropertyChangedEventListener listener = new PropertyChangedEventListener(source, handler); propertyChangedListeners.Add(listener); PropertyChangedEventManager.AddListener(source, listener, ""); }
/// <summary> /// Removes the weak event listener for a PropertyChanged event. /// </summary> /// <param name="source">The source of the event.</param> /// <param name="handler">The event handler.</param> /// <exception cref="ArgumentNullException">source must not be <c>null</c>.</exception> /// <exception cref="ArgumentNullException">handler must not be <c>null</c>.</exception> protected void RemoveWeakEventListener(INotifyPropertyChanged source, PropertyChangedEventHandler handler) { if (source == null) { throw new ArgumentNullException("source"); } if (handler == null) { throw new ArgumentNullException("handler"); } PropertyChangedEventListener listener = propertyChangedListeners.LastOrDefault(l => l.Source == source && l.Handler == handler); if (listener != null) { propertyChangedListeners.Remove(listener); PropertyChangedEventManager.RemoveListener(source, listener, ""); } }