public void RemoveExpandoListener(DependencyProperty dependencyProperty, IDependencyPropertyListener listener) { var listenerList = _expandoPropertyChangeListeners.GetValueOrDefault(dependencyProperty); if (listenerList == null) { return; } listenerList.Remove(listener); if (listenerList.IsEmpty) { _expandoPropertyChangeListeners.Remove(dependencyProperty); } }
public DependencyProperty CaptureServiceProperty(Type type, IDependencyPropertyListener listener) { var typeProperties = ServiceProperties.GetOrCreateValues(type); var weakListener = new WeakReference(listener ?? DummyListener.Instance); var property = typeProperties.FirstOrDefault(IsFreeImpl); if (property != null) { Target.ClearValue(property); _servicePropertyListeners.Add(property, weakListener); return(property); } var typeId = TypeIdDictionary.GetValueOrCreate(type, t => _nextTypeId++); property = RegisterServiceProperty($"{typeId}_svc{typeProperties.Count}", type); _servicePropertyListeners.Add(property, weakListener); typeProperties.Add(property); return(property); }
public void AddExpandoPropertyListener(DependencyProperty dependencyProperty, IDependencyPropertyListener listener) { _expandoPropertyChangeListeners.GetValueOrCreate(dependencyProperty, () => new WeakLinkedList <IDependencyPropertyListener>()).Add(listener); }