diff --git a/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs b/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs index 4270063f87..ba321db144 100644 --- a/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs +++ b/src/Markup/Avalonia.Markup/Data/TemplateBinding.cs @@ -137,9 +137,9 @@ namespace Avalonia.Data templatedParent.GetValue(Property) : _target.TemplatedParent; - if (Converter is not null && _targetType is not null) + if (Converter is not null) { - value = Converter.Convert(value, _targetType, ConverterParameter, CultureInfo.CurrentCulture); + value = Converter.Convert(value, _targetType ?? typeof(object), ConverterParameter, CultureInfo.CurrentCulture); } PublishNext(value); diff --git a/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs index 979dbec674..1e56981b98 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/TemplateBindingTests.cs @@ -248,6 +248,38 @@ namespace Avalonia.Markup.UnitTests.Data // binding is initiated. Assert.Equal(new[] { "foo" }, converter.Values); } + + [Fact] + public void Should_Execute_Converter_Without_Specific_TargetType() + { + // See https://github.com/AvaloniaUI/Avalonia/issues/9766 + var source = new Button + { + Template = new FuncControlTemplate