diff --git a/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs index 24149c17e0..6027676501 100644 --- a/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs +++ b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs @@ -60,7 +60,8 @@ namespace Avalonia.Data.Core var target = Expression.Parameter(typeof(object), "target"); return Expression.Lambda>( Expression.Convert(Expression.Call(Expression.Convert(target, info.DeclaringType!), info.GetMethod), - typeof(object))) + typeof(object)), + target) .Compile(); } diff --git a/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs b/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs new file mode 100644 index 0000000000..5c51dd0c06 --- /dev/null +++ b/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs @@ -0,0 +1,24 @@ +using Avalonia.Data.Core; +using Xunit; + +namespace Avalonia.Base.UnitTests.Data; + +public class ReflectionClrPropertyInfoTests +{ + public class TestClass + { + public string Test { get; set; } + } + + [Fact] + public void Can_Compile() + { + var propertyInfo = new ReflectionClrPropertyInfo( + typeof(TestClass).GetProperty(nameof(TestClass.Test))!); + var target = new TestClass(); + const string result = "qwerty"; + propertyInfo.Set(target, result); + Assert.Equal(result, target.Test); + Assert.Equal(result, (string)propertyInfo.Get(target)); + } +}