public void Dispose()
 {
     var listener = _eventListener;
     var weakItem = _weakItem;
     if (listener != null && !weakItem.IsEmpty)
     {
         _eventListener = null;
         _weakItem = WeakEventListenerWrapper.Empty;
         listener.Remove(weakItem, _propertyName);
     }
 }
 private static WeakPropertyChangedListener CreateWeakPropertyListener(INotifyPropertyChanged propertyChanged, object state)
 {
     var listener = new WeakPropertyChangedListener(propertyChanged);
     propertyChanged.PropertyChanged += listener.Handle;
     return listener;
 }
 private static WeakPropertyChangedListener UpdateSourceEvent(INotifyPropertyChanged item,
     Func<INotifyPropertyChanged, object, WeakPropertyChangedListener> addValue, WeakPropertyChangedListener currentValue, object state)
 {
     var array = (object[])state;
     var weakItem = (WeakEventListenerWrapper)array[1];
     var path = (string)array[2];
     array[3] = currentValue.AddInternal(weakItem, path);
     return currentValue;
 }
 public Unsubscriber(WeakPropertyChangedListener eventListener, WeakEventListenerWrapper weakItem)
 {
     _eventListener = eventListener;
     _weakItem = weakItem;
 }
 public Unsubscriber(WeakPropertyChangedListener eventListener, WeakEventListenerWrapper weakItem, string propertyName)
 {
     _eventListener = eventListener;
     _weakItem = weakItem;
     _propertyName = propertyName;
 }