From d4689c89100c4b81ae0b2702c750f40f5a74414e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro?= Date: Thu, 20 Aug 2020 21:16:31 +0100 Subject: [PATCH] Fixed TreeDataTemplate.ItemsSource for compiled bindings. --- .../Avalonia.Markup.Xaml/ApiCompatBaseline.txt | 4 ++++ .../Templates/TreeDataTemplate.cs | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt diff --git a/src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt b/src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt new file mode 100644 index 0000000000..c87dcacda4 --- /dev/null +++ b/src/Markup/Avalonia.Markup.Xaml/ApiCompatBaseline.txt @@ -0,0 +1,4 @@ +Compat issues with assembly Avalonia.Markup.Xaml: +MembersMustExist : Member 'public Avalonia.Data.Binding Avalonia.Markup.Xaml.Templates.TreeDataTemplate.ItemsSource.get()' does not exist in the implementation but it does exist in the contract. +MembersMustExist : Member 'public void Avalonia.Markup.Xaml.Templates.TreeDataTemplate.ItemsSource.set(Avalonia.Data.Binding)' does not exist in the implementation but it does exist in the contract. +Total Issues: 2 diff --git a/src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs b/src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs index b8e1c2df80..d785ac4ac0 100644 --- a/src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs +++ b/src/Markup/Avalonia.Markup.Xaml/Templates/TreeDataTemplate.cs @@ -2,7 +2,9 @@ using System; using Avalonia.Controls; using Avalonia.Controls.Templates; using Avalonia.Data; +using Avalonia.Data.Core; using Avalonia.Markup.Parsers; +using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Metadata; namespace Avalonia.Markup.Xaml.Templates @@ -16,7 +18,7 @@ namespace Avalonia.Markup.Xaml.Templates public object Content { get; set; } [AssignBinding] - public Binding ItemsSource { get; set; } + public BindingBase ItemsSource { get; set; } public bool Match(object data) { @@ -34,7 +36,13 @@ namespace Avalonia.Markup.Xaml.Templates { if (ItemsSource != null) { - var obs = ExpressionObserverBuilder.Build(item, ItemsSource.Path); + var obs = ItemsSource switch + { + Binding reflection => ExpressionObserverBuilder.Build(item, reflection.Path), + CompiledBindingExtension compiled => new ExpressionObserver(item, compiled.Path.BuildExpression(false)), + _ => throw new InvalidOperationException("TreeDataTemplate currently only supports Binding and CompiledBindingExtension!") + }; + return InstancedBinding.OneWay(obs, BindingPriority.Style); }