diff --git a/Perspex.Base/PerspexObject.cs b/Perspex.Base/PerspexObject.cs index 102a7e030d..c12d986df8 100644 --- a/Perspex.Base/PerspexObject.cs +++ b/Perspex.Base/PerspexObject.cs @@ -693,17 +693,18 @@ namespace Perspex { Contract.Requires(property != null); + PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs(this, property, oldValue, newValue); + property.NotifyChanged(e); + if (this.PropertyChanged != null) { - PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs(this, property, oldValue, newValue); - property.NotifyChanged(e); this.PropertyChanged(this, e); } if (this.inpcChanged != null) { - PropertyChangedEventArgs e = new PropertyChangedEventArgs(property.Name); - this.inpcChanged(this, e); + PropertyChangedEventArgs e2 = new PropertyChangedEventArgs(property.Name); + this.inpcChanged(this, e2); } } } diff --git a/Perspex.UnitTests/PerspexPropertyTests.cs b/Perspex.UnitTests/PerspexPropertyTests.cs index c874751757..e824042e17 100644 --- a/Perspex.UnitTests/PerspexPropertyTests.cs +++ b/Perspex.UnitTests/PerspexPropertyTests.cs @@ -4,6 +4,7 @@ // // ----------------------------------------------------------------------- +using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Perspex.UnitTests { using System; @@ -82,8 +83,22 @@ namespace Perspex.UnitTests Assert.AreEqual("Bar", target.GetDefaultValue()); } + [TestMethod] + public void Changed_Observable_Fired() + { + var target = new Class1(); + bool fired = false; + + Class1.FooProperty.Changed.Subscribe(x => fired = true); + target.SetValue(Class1.FooProperty, "newvalue"); + + Assert.IsTrue(fired); + } + private class Class1 : PerspexObject { + public static readonly PerspexProperty FooProperty = + PerspexProperty.Register("Foo"); } private class Class2 : Class1