public void ListenerChangedIsRaisedWhenDataContextIsReplaced()
        {
            var myObject = new MyClass {
                Value = "Initial"
            };
            var mySecondObject = new MyClass {
                Value = "Final"
            };
            var binding = new Binding("Value");
            var element = new TextBlock {
                DataContext = myObject
            };

            var currentState = string.Empty;
            var listener     = new DependencyPropertyListener();

            listener.Changed += ((s, e) => currentState = (string)e.EventArgs.NewValue);
            listener.Attach(element, binding);

            var initialState = currentState;

            element.DataContext = mySecondObject;
            var finalState = currentState;

            Assert.AreEqual("Initial", initialState);
            Assert.AreEqual("Final", finalState);
        }
Пример #2
0
        private void ReturnListener()
        {
            this.listener.Changed -= this.HandleValueChanged;

            BindingListener.freeListeners.Add(this.listener);

            this.listener = null;
        }
Пример #3
0
        private void Attach() {
            this.Detach();

            if (this.target != null && this.binding != null) {
                this.listener = this.GetListener();
                this.listener.Attach(target, binding);
            }
        }
Пример #4
0
        private void ReturnListener()
        {
            _listener.Changed -= HandleValueChanged;
            _listener.Detach();

            FreeListeners.Add(_listener);

            _listener = null;
        }
Пример #5
0
        private void ReturnListener()
        {
            this.listener.Changed -= this.HandleValueChanged;
            this.listener.Detach();

            freeListeners.Add(this.listener);

            this.listener = null;
        }
Пример #6
0
        private void Attach()
        {
            this.Detach();

            if (this.target != null && this.binding != null)
            {
                this.listener = this.GetListener();
                this.listener.Attach(target, binding);
            }
        }
Пример #7
0
        private void Attach()
        {
            Detach();

            if (_target != null &&
                _binding != null)
            {
                _listener = GetListener();
                _listener.Attach(_target, _binding);
            }
        }
Пример #8
0
 private static void DisposeInternal(DependencyPropertyListener listener)
 {
     try
     {
         if (listener._listener.IsEmpty)
         {
             return;
         }
         listener.ClearValue(ValueProperty);
         listener._listener = WeakEventListenerWrapper.Empty;
     }
     catch (InvalidOperationException e)
     {
         Tracer.Error(e.Flatten(true));
     }
 }
Пример #9
0
        private DependencyPropertyListener GetListener()
        {
            DependencyPropertyListener listener;

            if (FreeListeners.Count != 0)
            {
                listener = FreeListeners[FreeListeners.Count - 1];
                FreeListeners.RemoveAt(FreeListeners.Count - 1);

                return(listener);
            }
            listener = new DependencyPropertyListener();

            listener.Changed += HandleValueChanged;

            return(listener);
        }
        public void TracksChanges()
        {
            var changes   = new List <DependencyPropertyChangedEventArgs>();
            var textBlock = new TextBlock();
            var listener  = new DependencyPropertyListener(textBlock, TextBlock.TextProperty);

            listener.Changed += (_, e) => changes.Add(e);

            textBlock.Text = "1";
            Assert.AreEqual(1, changes.Count);
            Assert.AreEqual(string.Empty, changes.Last().OldValue);
            Assert.AreEqual("1", changes.Last().NewValue);

            textBlock.Text = "2";
            Assert.AreEqual(2, changes.Count);
            Assert.AreEqual("1", changes.Last().OldValue);
            Assert.AreEqual("2", changes.Last().NewValue);
            listener.Dispose();
        }
Пример #11
0
        private DependencyPropertyListener GetListener()
        {
            DependencyPropertyListener listener;

            if (freeListeners.Count != 0)
            {
                listener = freeListeners[freeListeners.Count - 1];
                freeListeners.RemoveAt(freeListeners.Count - 1);

                return(listener);
            }
            else
            {
                listener = new DependencyPropertyListener();
            }

            listener.Changed += this.HandleValueChanged;

            return(listener);
        }
        public TSource TryUpdateSubscription(BindingMode bindingMode, TSource source)
        {
            if (DataBindingHelper.RequiresSourcePropertyChangeNotification(bindingMode))
            {
                var newSource = this.sourceContext.Source;
                if (!Equals(newSource, source))
                {
                    this.Unsubscribe(source);
                    source = newSource;
                    if (!Equals(source, default))
                    {
                        if (source is DependencyObject dependencyObject)
                        {
                            this.dependencyPropertyListener = DependencyPropertyListener.Subscribe(dependencyObject, this.DependencyProperty, this.OnDataContextInvalidateRequired);
                        }
                    }
                }
            }

            return(source);
        }
Пример #13
0
        private void Attach()
        {
            Detach();

            if (_target != null
                && _binding != null)
            {
                _listener = GetListener();
                _listener.Attach(_target, _binding);
            }
        }
        private void ReturnListener()
        {
            this.listener.Changed -= this.HandleValueChanged;

            freeListeners.Add(this.listener);

            this.listener = null;
        }
        private DependencyPropertyListener GetListener()
        {
            DependencyPropertyListener listener;

            if (freeListeners.Count != 0)
            {
                listener = freeListeners[freeListeners.Count - 1];
                freeListeners.RemoveAt(freeListeners.Count - 1);

                return listener;
            }

            listener = new DependencyPropertyListener();

            listener.Changed += this.HandleValueChanged;

            return listener;
        }
Пример #16
0
        private DependencyPropertyListener GetListener()
        {
            DependencyPropertyListener listener;

            if (BindingListener.freeListeners.Count != 0) {
                listener = BindingListener.freeListeners[BindingListener.freeListeners.Count - 1];
                BindingListener.freeListeners.RemoveAt(BindingListener.freeListeners.Count - 1);

                return listener;
            }
            else
                listener = new DependencyPropertyListener();

            listener.Changed += this.HandleValueChanged;

            return listener;
        }
 public void Unsubscribe(TSource source)
 {
     this.dependencyPropertyListener?.Dispose();
     this.dependencyPropertyListener = null;
 }
Пример #18
0
        private void ReturnListener()
        {
            _listener.Changed -= HandleValueChanged;
            _listener.Detach();

            FreeListeners.Add(_listener);

            _listener = null;
        }