diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
index c16c77af8d..f6a33aa026 100644
--- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
+++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
@@ -39,9 +39,9 @@ namespace Perspex.Markup.Xaml.Context
public override void SetValue(object instance, object value)
{
- if (value is IBinding)
+ if (value is IXamlBinding)
{
- HandleBinding(instance, (IBinding)value);
+ HandleBinding(instance, (IXamlBinding)value);
}
else if (IsPerspexProperty)
{
@@ -68,9 +68,9 @@ namespace Perspex.Markup.Xaml.Context
po.SetValue(pp, value);
}
- private void HandleBinding(object instance, IBinding binding)
+ private void HandleBinding(object instance, IXamlBinding binding)
{
- if (typeof(IBinding).GetTypeInfo().IsAssignableFrom(_xamlMember.XamlType.UnderlyingType.GetTypeInfo()))
+ if (typeof(IXamlBinding).GetTypeInfo().IsAssignableFrom(_xamlMember.XamlType.UnderlyingType.GetTypeInfo()))
{
var property = instance.GetType().GetRuntimeProperty(_xamlMember.Name);
@@ -88,7 +88,7 @@ namespace Perspex.Markup.Xaml.Context
}
}
- private void ApplyBinding(object instance, IBinding binding)
+ private void ApplyBinding(object instance, IXamlBinding binding)
{
var perspexObject = instance as PerspexObject;
var attached = _xamlMember as PerspexAttachableXamlMember;
diff --git a/src/Markup/Perspex.Markup.Xaml/Data/Binding.cs b/src/Markup/Perspex.Markup.Xaml/Data/Binding.cs
index 3ef83da68a..8cc5a981f5 100644
--- a/src/Markup/Perspex.Markup.Xaml/Data/Binding.cs
+++ b/src/Markup/Perspex.Markup.Xaml/Data/Binding.cs
@@ -10,28 +10,47 @@ using Perspex.Markup.Data;
namespace Perspex.Markup.Xaml.Data
{
- public class Binding : IBinding
+ ///
+ /// A XAML binding.
+ ///
+ public class Binding : IXamlBinding
{
- private readonly ITypeConverterProvider _typeConverterProvider;
-
- public Binding()
- {
- }
-
- public Binding(ITypeConverterProvider typeConverterProvider)
- {
- _typeConverterProvider = typeConverterProvider;
- }
-
+ ///
+ /// Gets or sets the to use.
+ ///
public IValueConverter Converter { get; set; }
+
+ ///
+ /// Gets or sets the binding mode.
+ ///
public BindingMode Mode { get; set; }
+
+ ///
+ /// Gets or sets the binding priority.
+ ///
public BindingPriority Priority { get; set; }
+
+ ///
+ /// Gets or sets the relative source for the binding.
+ ///
public RelativeSource RelativeSource { get; set; }
+
+ ///
+ /// Gets or sets the binding path.
+ ///
public string SourcePropertyPath { get; set; }
+ ///
+ /// Applies the binding to a property on an instance.
+ ///
+ /// The target instance.
+ /// The target property.
public void Bind(IObservablePropertyBag instance, PerspexProperty property)
{
- var subject = CreateExpressionSubject(instance, property);
+ var subject = CreateSubject(
+ instance,
+ property.PropertyType,
+ property == Control.DataContextProperty);
if (subject != null)
{
@@ -39,19 +58,29 @@ namespace Perspex.Markup.Xaml.Data
}
}
- public ISubject