diff --git a/src/Markup/Perspex.Markup.Xaml/Binding/XamlBindingDefinition.cs b/src/Markup/Perspex.Markup.Xaml/Binding/XamlBindingDefinition.cs
deleted file mode 100644
index 4110169a7d..0000000000
--- a/src/Markup/Perspex.Markup.Xaml/Binding/XamlBindingDefinition.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) The Perspex Project. All rights reserved.
-// Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-namespace Perspex.Markup.Xaml.Binding
-{
- public class XamlBindingDefinition
- {
- public BindingMode Mode { get; set; }
- public BindingPriority Priority { get; set; }
- public RelativeSource RelativeSource { get; set; }
- public string SourcePropertyPath { get; set; }
- }
-}
\ No newline at end of file
diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
index d0af0cd491..4258dd5090 100644
--- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
+++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexXamlMemberValuePlugin.cs
@@ -24,11 +24,24 @@ namespace Perspex.Markup.Xaml.Context
_xamlMember = xamlMember;
}
+ // ReSharper disable once MemberCanBePrivate.Global
+ public PerspexProperty PerspexProperty
+ {
+ get
+ {
+ var underlyingType = _xamlMember.DeclaringType.UnderlyingType;
+ var name = _xamlMember.Name + "Property";
+
+ var value = ReflectionExtensions.GetValueOfStaticField(underlyingType, name);
+ return value as PerspexProperty;
+ }
+ }
+
public override void SetValue(object instance, object value)
{
- if (value is XamlBindingDefinition)
+ if (value is XamlBinding)
{
- HandleXamlBindingDefinition(instance, (XamlBindingDefinition)value);
+ HandleXamlBindingDefinition(instance, (XamlBinding)value);
}
else if (IsPerspexProperty)
{
@@ -55,12 +68,11 @@ namespace Perspex.Markup.Xaml.Context
po.SetValue(pp, value);
}
- private void HandleXamlBindingDefinition(object instance, XamlBindingDefinition def)
+ private void HandleXamlBindingDefinition(object instance, XamlBinding binding)
{
- if (_xamlMember.XamlType.UnderlyingType == typeof(XamlBindingDefinition))
+ if (_xamlMember.XamlType.UnderlyingType == typeof(XamlBinding))
{
- // TODO: This should search base classes.
- var property = instance.GetType().GetTypeInfo().GetDeclaredProperty(_xamlMember.Name);
+ var property = instance.GetType().GetRuntimeProperty(_xamlMember.Name);
if (property == null || !property.CanWrite)
{
@@ -68,74 +80,58 @@ namespace Perspex.Markup.Xaml.Context
$"Cannot assign to '{_xamlMember.Name}' on '{instance.GetType()}");
}
- property.SetValue(instance, def);
+ property.SetValue(instance, binding);
}
else
{
- var perspexObject = instance as PerspexObject;
- var attached = _xamlMember as PerspexAttachableXamlMember;
-
- if (perspexObject == null)
- {
- throw new InvalidOperationException(
- $"Cannot bind to an object of type '{instance.GetType()}");
- }
-
- PerspexProperty property;
- string propertyName;
+ ApplyBinding(instance, binding);
+ }
+ }
- if (attached == null)
- {
- propertyName = _xamlMember.Name;
- property = PerspexPropertyRegistry.Instance.GetRegistered(perspexObject)
- .FirstOrDefault(x => x.Name == propertyName);
- }
- else
- {
- // Ensure the OwnerType's static ctor has been run.
- RuntimeHelpers.RunClassConstructor(attached.DeclaringType.UnderlyingType.TypeHandle);
+ private void ApplyBinding(object instance, XamlBinding binding)
+ {
+ var perspexObject = instance as PerspexObject;
+ var attached = _xamlMember as PerspexAttachableXamlMember;
- propertyName = attached.DeclaringType.UnderlyingType.Name + '.' + _xamlMember.Name;
+ if (perspexObject == null)
+ {
+ throw new InvalidOperationException(
+ $"Cannot bind to an object of type '{instance.GetType()}");
+ }
- property = PerspexPropertyRegistry.Instance.GetRegistered(perspexObject)
- .Where(x => x.IsAttached && x.OwnerType == attached.DeclaringType.UnderlyingType)
- .FirstOrDefault(x => x.Name == _xamlMember.Name);
- }
+ PerspexProperty property;
+ string propertyName;
- if (property == null)
- {
- throw new InvalidOperationException(
- $"Cannot find '{propertyName}' on '{instance.GetType()}");
- }
+ if (attached == null)
+ {
+ propertyName = _xamlMember.Name;
+ property = PerspexPropertyRegistry.Instance.GetRegistered(perspexObject)
+ .FirstOrDefault(x => x.Name == propertyName);
+ }
+ else
+ {
+ // Ensure the OwnerType's static ctor has been run.
+ RuntimeHelpers.RunClassConstructor(attached.DeclaringType.UnderlyingType.TypeHandle);
- var binding = new XamlBinding
- {
- Mode = def.Mode,
- Priority = def.Priority,
- RelativeSource = def.RelativeSource,
- SourcePropertyPath = def.SourcePropertyPath,
- };
+ propertyName = attached.DeclaringType.UnderlyingType.Name + '.' + _xamlMember.Name;
- binding.Bind(perspexObject, property);
+ property = PerspexPropertyRegistry.Instance.GetRegistered(perspexObject)
+ .Where(x => x.IsAttached && x.OwnerType == attached.DeclaringType.UnderlyingType)
+ .FirstOrDefault(x => x.Name == _xamlMember.Name);
}
- }
- // ReSharper disable once MemberCanBePrivate.Global
- public PerspexProperty PerspexProperty
- {
- get
+ if (property == null)
{
- var underlyingType = _xamlMember.DeclaringType.UnderlyingType;
- var name = _xamlMember.Name + "Property";
-
- var value = ReflectionExtensions.GetValueOfStaticField(underlyingType, name);
- return value as PerspexProperty;
+ throw new InvalidOperationException(
+ $"Cannot find '{propertyName}' on '{instance.GetType()}");
}
+
+ binding.Bind(perspexObject, property);
}
private bool ValueRequiresSpecialHandling(object value)
{
- return value is XamlBindingDefinition || IsPerspexProperty;
+ return value is XamlBinding || IsPerspexProperty;
}
private bool IsPerspexProperty => PerspexProperty != null;
diff --git a/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs b/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs
index 2b6e80bf3c..f7bc5c39b6 100644
--- a/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs
+++ b/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/BindingExtension.cs
@@ -1,10 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
-using System;
-using System.Linq;
using OmniXaml;
-using Perspex.Controls;
using Perspex.Markup.Xaml.Binding;
namespace Perspex.Markup.Xaml.MarkupExtensions
@@ -22,7 +19,7 @@ namespace Perspex.Markup.Xaml.MarkupExtensions
public override object ProvideValue(MarkupExtensionContext extensionContext)
{
- return new XamlBindingDefinition
+ return new XamlBinding
{
Mode = Mode,
SourcePropertyPath = Path,
diff --git a/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs b/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs
index 10dad04061..b406390459 100644
--- a/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs
+++ b/src/Markup/Perspex.Markup.Xaml/MarkupExtensions/TemplateBindingExtension.cs
@@ -19,12 +19,7 @@ namespace Perspex.Markup.Xaml.MarkupExtensions
public override object ProvideValue(MarkupExtensionContext extensionContext)
{
- if (Converter != null)
- {
-
- }
-
- return new XamlBindingDefinition
+ return new XamlBinding
{
Mode = Mode,
Priority = BindingPriority.TemplatedParent,
diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
index 59b84c3f8c..a948272d3a 100644
--- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
+++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj
@@ -42,7 +42,6 @@
-
diff --git a/src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs b/src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs
index 6a5c28d97b..a10ca17039 100644
--- a/src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs
+++ b/src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs
@@ -19,7 +19,7 @@ namespace Perspex.Markup.Xaml.Templates
[Content]
public TemplateContent Content { get; set; }
- public XamlBindingDefinition ItemsSource { get; set; }
+ public XamlBinding ItemsSource { get; set; }
public bool Match(object data)
{