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); }
private void ReturnListener() { this.listener.Changed -= this.HandleValueChanged; BindingListener.freeListeners.Add(this.listener); this.listener = null; }
private void Attach() { this.Detach(); if (this.target != null && this.binding != null) { this.listener = this.GetListener(); this.listener.Attach(target, binding); } }
private void ReturnListener() { _listener.Changed -= HandleValueChanged; _listener.Detach(); FreeListeners.Add(_listener); _listener = null; }
private void ReturnListener() { this.listener.Changed -= this.HandleValueChanged; this.listener.Detach(); freeListeners.Add(this.listener); this.listener = null; }
private void Attach() { Detach(); if (_target != null && _binding != null) { _listener = GetListener(); _listener.Attach(_target, _binding); } }
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)); } }
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(); }
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); }
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; }
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; }