public void AttachPropertyChangedHandler_Should_Be_Called_On_Chain() { var source = new Mock<IObservableDependencyObject>(); var foo = new Mock<IObservableDependencyObject>(); var bar = new Mock<IObservableDependencyObject>(); Mock<IPropertyPathParser> mockPathParser = new Mock<IPropertyPathParser>(); mockPathParser.Setup(x => x.Parse(source.Object, "Foo.Bar")).Returns(new[] { new PropertyPathToken(source.Object, "Foo"), new PropertyPathToken(foo.Object, "Bar"), new PropertyPathToken(bar.Object, null), }); Mock<DependencyObject> mockTarget = new Mock<DependencyObject>(); Binding binding = new Binding { Path = new PropertyPath("Foo.Bar"), Source = source.Object, }; BindingExpression target = new BindingExpression( mockPathParser.Object, mockTarget.Object, Control.BackgroundProperty, binding); target.GetValue(); source.Verify(x => x.AttachPropertyChangedHandler("Foo", It.IsAny<DependencyPropertyChangedEventHandler>())); foo.Verify(x => x.AttachPropertyChangedHandler("Bar", It.IsAny<DependencyPropertyChangedEventHandler>())); bar.Verify(x => x.AttachPropertyChangedHandler("Bar", It.IsAny<DependencyPropertyChangedEventHandler>()), Times.Never()); }
public BindingExpression SetBinding(DependencyProperty dp, Binding binding) { PropertyPathParser pathParser = new PropertyPathParser(); BindingExpression expression = new BindingExpression(pathParser, this, dp, binding); object oldValue = this.GetValue(dp); object newValue = expression.GetValue(); this.propertyBindings.Add(dp, expression); this.SetValueInternal(dp, oldValue, newValue); return expression; }