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 {