Browse Source

Fix bug with perspex property changed.

It wasn't raised if the object didn't have a listener for that property.
pull/10/head
Steven Kirk 12 years ago
parent
commit
2492094141
  1. 9
      Perspex.Base/PerspexObject.cs
  2. 15
      Perspex.UnitTests/PerspexPropertyTests.cs

9
Perspex.Base/PerspexObject.cs

@ -693,17 +693,18 @@ namespace Perspex
{ {
Contract.Requires<NullReferenceException>(property != null); Contract.Requires<NullReferenceException>(property != null);
PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs(this, property, oldValue, newValue);
property.NotifyChanged(e);
if (this.PropertyChanged != null) if (this.PropertyChanged != null)
{ {
PerspexPropertyChangedEventArgs e = new PerspexPropertyChangedEventArgs(this, property, oldValue, newValue);
property.NotifyChanged(e);
this.PropertyChanged(this, e); this.PropertyChanged(this, e);
} }
if (this.inpcChanged != null) if (this.inpcChanged != null)
{ {
PropertyChangedEventArgs e = new PropertyChangedEventArgs(property.Name); PropertyChangedEventArgs e2 = new PropertyChangedEventArgs(property.Name);
this.inpcChanged(this, e); this.inpcChanged(this, e2);
} }
} }
} }

15
Perspex.UnitTests/PerspexPropertyTests.cs

@ -4,6 +4,7 @@
// </copyright> // </copyright>
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Perspex.UnitTests namespace Perspex.UnitTests
{ {
using System; using System;
@ -82,8 +83,22 @@ namespace Perspex.UnitTests
Assert.AreEqual("Bar", target.GetDefaultValue<Class2>()); Assert.AreEqual("Bar", target.GetDefaultValue<Class2>());
} }
[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 private class Class1 : PerspexObject
{ {
public static readonly PerspexProperty<string> FooProperty =
PerspexProperty.Register<Class1, string>("Foo");
} }
private class Class2 : Class1 private class Class2 : Class1

Loading…
Cancel
Save