diff --git a/src/Markup/Avalonia.Markup/AlwaysEnabledDelegateCommand.cs b/src/Markup/Avalonia.Markup/AlwaysEnabledDelegateCommand.cs index 6de9be80cc..48db99b43c 100644 --- a/src/Markup/Avalonia.Markup/AlwaysEnabledDelegateCommand.cs +++ b/src/Markup/Avalonia.Markup/AlwaysEnabledDelegateCommand.cs @@ -1,5 +1,8 @@ -using System; +using Avalonia.Utilities; +using System; using System.Collections.Generic; +using System.Globalization; +using System.Reflection; using System.Text; using System.Windows.Input; @@ -9,9 +12,13 @@ namespace Avalonia.Markup { private readonly Delegate action; + private ParameterInfo parameterInfo; + public AlwaysEnabledDelegateCommand(Delegate action) { this.action = action; + var parameters = action.Method.GetParameters(); + parameterInfo = parameters.Length == 0 ? null : parameters[0]; } #pragma warning disable 0067 @@ -22,13 +29,14 @@ namespace Avalonia.Markup public void Execute(object parameter) { - if (action.Method.GetParameters().Length == 0) + if (parameterInfo == null) { action.DynamicInvoke(); } else { - action.DynamicInvoke(parameter); + TypeUtilities.TryConvert(parameterInfo.ParameterType, parameter, CultureInfo.CurrentCulture, out object convertedParameter); + action.DynamicInvoke(convertedParameter); } } } diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs index 031f14d686..0d96df8eb8 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs @@ -61,8 +61,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data Assert.Equal("Called 5", vm.Value); } } - - // Should this work or should it be a binding error? + [Fact] public void Binding_Method_To_TextBlock_Text_Works() {