From 70ae77e797080c4f3d9bb76384ed7984002338e7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 12 Oct 2019 18:03:50 -0700 Subject: [PATCH] Fix ElementName bindings. --- .../XamlIlBindingPathHelper.cs | 2 +- .../CompiledBindingExtensionTests.cs | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlBindingPathHelper.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlBindingPathHelper.cs index 69512dcf75..5d90f17117 100644 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlBindingPathHelper.cs +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlBindingPathHelper.cs @@ -191,7 +191,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions } if (elementType is null) { - elementType = ScopeRegistrationFinder.GetTargetType(context.RootObject, elementName.Name); + elementType = ScopeRegistrationFinder.GetTargetType(context.ParentNodes().Last(), elementName.Name); } if (elementType is null) diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs index 0648ca6571..ac4ff7036a 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs @@ -409,6 +409,36 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions Assert.Throws(() => loader.Load(xaml)); } } + + [Fact] + public void ResolvesElementNameBinding() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var xaml = @" + + + + + +"; + var loader = new AvaloniaXamlLoader(); + var window = (Window)loader.Load(xaml); + var textBlock = window.FindControl("text2"); + + var dataContext = new TestDataContext + { + StringProperty = "foobar" + }; + + window.DataContext = dataContext; + + Assert.Equal(dataContext.StringProperty, textBlock.Text); + } + } } public class TestDataContext