diff --git a/src/Avalonia.Base/AvaloniaProperty.cs b/src/Avalonia.Base/AvaloniaProperty.cs
index 1de5cb06c6..3e70f549f3 100644
--- a/src/Avalonia.Base/AvaloniaProperty.cs
+++ b/src/Avalonia.Base/AvaloniaProperty.cs
@@ -7,6 +7,7 @@ using System.Diagnostics;
using System.Reactive.Subjects;
using System.Reflection;
using Avalonia.Data;
+using Avalonia.Data.Core;
using Avalonia.Utilities;
namespace Avalonia
@@ -14,7 +15,7 @@ namespace Avalonia
///
/// Base class for avalonia properties.
///
- public class AvaloniaProperty : IEquatable
+ public class AvaloniaProperty : IEquatable, IPropertyInfo
{
///
/// Represents an unset property value.
@@ -546,7 +547,10 @@ namespace Avalonia
}
}
-
+ bool IPropertyInfo.CanGet => true;
+ bool IPropertyInfo.CanSet => true;
+ object IPropertyInfo.Get(object target) => ((AvaloniaObject)target).GetValue(this);
+ void IPropertyInfo.Set(object target, object value) => ((AvaloniaObject)target).SetValue(this, value);
}
///
/// Class representing the .
diff --git a/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs
new file mode 100644
index 0000000000..05059b6617
--- /dev/null
+++ b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace Avalonia.Data.Core
+{
+ public class ClrPropertyInfo : IPropertyInfo
+ {
+ private readonly Func