Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
 public void AddExpandoPropertyListener(DependencyProperty dependencyProperty, IDependencyPropertyListener listener)
 {
     _expandoPropertyChangeListeners.GetValueOrCreate(dependencyProperty, () => new WeakLinkedList <IDependencyPropertyListener>()).Add(listener);
 }