From 538a4b2993c9de46c31003db098f98cdfbf49fc5 Mon Sep 17 00:00:00 2001 From: zacfromaustinpowder <165237243+zacfromaustinpowder@users.noreply.github.com> Date: Thu, 13 Nov 2025 16:32:29 +1000 Subject: [PATCH] Added a constructor to FuncMultiValueConverter that takes an IReadOnlyList instead of an IEnumerable (#19936) Co-authored-by: Max Katz --- .../Data/Converters/FuncMultiValueConverter.cs | 15 ++++++++++++--- .../AvaloniaObjectTests_MultiBinding.cs | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs b/src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs index 5084d8e822..c60b5f7053 100644 --- a/src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs +++ b/src/Avalonia.Base/Data/Converters/FuncMultiValueConverter.cs @@ -13,17 +13,26 @@ namespace Avalonia.Data.Converters /// The output type. public class FuncMultiValueConverter : IMultiValueConverter { - private readonly Func, TOut> _convert; + private readonly Func, TOut> _convert; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The convert function. - public FuncMultiValueConverter(Func, TOut> convert) + public FuncMultiValueConverter(Func, TOut> convert) { _convert = convert; } + /// + /// Initializes a new instance of the class. + /// + /// The convert function. + public FuncMultiValueConverter(Func, TOut> convert) + : this(new Func, TOut>(convert)) + { + } + /// public object? Convert(IList values, Type targetType, object? parameter, CultureInfo culture) { diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_MultiBinding.cs b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_MultiBinding.cs index 757160a0a4..f3cf36998c 100644 --- a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_MultiBinding.cs +++ b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_MultiBinding.cs @@ -153,6 +153,20 @@ namespace Avalonia.Base.UnitTests Assert.Equal(",Bar,Baz", value); } + + [Fact] + public void MultiValueConverter_Supports_Indexing_The_Parameters() + { + var target = new FuncMultiValueConverter(v => v[0]); + + object value = target.Convert(new[] { "Foo", "Bar", "Baz" }, typeof(string), null, CultureInfo.InvariantCulture); + + Assert.Equal("Foo", value); + + value = target.Convert(new[] { null, "Bar", "Baz" }, typeof(string), null, CultureInfo.InvariantCulture); + + Assert.Null(value); + } private struct StringValueTypeWrapper {