From 7020def3541664368794f9b175a50d460ba5119a Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 12 Sep 2019 20:58:22 -0700 Subject: [PATCH] Throw exception if trying to compile a binding under an element with its DataContext bound via a non-compiled binding. --- ...valoniaXamlIlDataContextTypeTransformer.cs | 2 +- .../CompiledBindingExtensionTests.cs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs index 0dce20b81c..b558019b33 100644 --- a/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs +++ b/src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs @@ -163,7 +163,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers return new AvaloniaXamlIlDataContextTypeMetadataNode(on, bindingResultType); } - return null; + return new AvaloniaXamlIlUninferrableDataContextMetadataNode(on); } } diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs index f1a52d902b..3de6e035ba 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs @@ -309,6 +309,25 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions } } + [Fact] + public void ThrowsOnUninferrableDataTypeFromNonCompiledDataContextBindingWithCompiledBindingPath() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var xaml = @" + + + + +"; + var loader = new AvaloniaXamlLoader(); + Assert.Throws(() => loader.Load(xaml)); + } + } + [Fact] public void InfersDataTemplateTypeFromParentCollectionItemsType() {