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);
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);
}
}
}

15
Perspex.UnitTests/PerspexPropertyTests.cs

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

Loading…
Cancel
Save