diff --git a/Perspex.Base/Diagnostics/IPerspexPropertyBinding.cs b/Perspex.Base/Diagnostics/IPerspexPropertyBinding.cs
new file mode 100644
index 0000000000..a27cc7e902
--- /dev/null
+++ b/Perspex.Base/Diagnostics/IPerspexPropertyBinding.cs
@@ -0,0 +1,17 @@
+// -----------------------------------------------------------------------
+//
+// Copyright 2015 MIT Licence. See licence.md for more information.
+//
+// -----------------------------------------------------------------------
+
+namespace Perspex.Diagnostics
+{
+ public interface IPerspexPropertyBinding
+ {
+ string Description { get; }
+
+ int Priority { get; }
+
+ object Value { get; }
+ }
+}
\ No newline at end of file
diff --git a/Perspex.Base/Diagnostics/PerspexPropertyBinding.cs b/Perspex.Base/Diagnostics/PerspexPropertyBinding.cs
new file mode 100644
index 0000000000..771fb73b40
--- /dev/null
+++ b/Perspex.Base/Diagnostics/PerspexPropertyBinding.cs
@@ -0,0 +1,17 @@
+// -----------------------------------------------------------------------
+//
+// Copyright 2015 MIT Licence. See licence.md for more information.
+//
+// -----------------------------------------------------------------------
+
+namespace Perspex.Diagnostics
+{
+ internal class PerspexPropertyBinding : IPerspexPropertyBinding
+ {
+ public string Description { get; set; }
+
+ public int Priority { get; set; }
+
+ public object Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Perspex.Base/Perspex.Base.csproj b/Perspex.Base/Perspex.Base.csproj
index 0ef4c82d26..fdba33905a 100644
--- a/Perspex.Base/Perspex.Base.csproj
+++ b/Perspex.Base/Perspex.Base.csproj
@@ -35,6 +35,9 @@
+
+
+
@@ -51,6 +54,7 @@
+
diff --git a/Perspex.Base/PerspexObject.cs b/Perspex.Base/PerspexObject.cs
index 0783210239..564698a54b 100644
--- a/Perspex.Base/PerspexObject.cs
+++ b/Perspex.Base/PerspexObject.cs
@@ -14,6 +14,8 @@ namespace Perspex
using System.Reflection;
using Perspex.Diagnostics;
using Splat;
+ using System.Reactive.Disposables;
+
///
/// The priority of a binding.
@@ -497,11 +499,14 @@ namespace Perspex
///
/// The property.
/// The value.
- public void SetValue(PerspexProperty property, object value)
+ /// The priority of the value.
+ public void SetValue(
+ PerspexProperty property,
+ object value,
+ BindingPriority priority = BindingPriority.LocalValue)
{
Contract.Requires(property != null);
- const int Priority = (int)BindingPriority.LocalValue;
PriorityValue v;
if (!this.IsRegistered(property))
@@ -539,7 +544,7 @@ namespace Perspex
this.GetHashCode(),
value);
- v.Replace(Observable.Never