Ver Fonte

Merge pull request #3585 from AvaloniaUI/fixes/3584-convert-timespan

Use TypeConverters in TypeUtilities.TryConvert
Jumar Macato há 5 anos atrás
pai
commit
6b15c84a01

+ 9 - 0
src/Avalonia.Base/Utilities/TypeUtilities.cs

@@ -2,6 +2,7 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
+using System.ComponentModel;
 using System.Globalization;
 using System.Linq;
 using System.Reflection;
@@ -185,6 +186,14 @@ namespace Avalonia.Utilities
                 }
             }
 
+            var typeConverter = TypeDescriptor.GetConverter(to);
+
+            if (typeConverter.CanConvertFrom(from) == true)
+            {
+                result = typeConverter.ConvertFrom(null, culture, value);
+                return true;
+            }
+
             var cast = FindTypeConversionOperatorMethod(from, to, OperatorType.Implicit | OperatorType.Explicit);
 
             if (cast != null)

+ 12 - 0
tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs

@@ -50,6 +50,18 @@ namespace Avalonia.Base.UnitTests.Data.Converters
             Assert.Equal(TestEnum.Bar, result);
         }
 
+        [Fact]
+        public void Can_Convert_String_To_TimeSpan()
+        {
+            var result = DefaultValueConverter.Instance.Convert(
+                "00:00:10",
+                typeof(TimeSpan),
+                null,
+                CultureInfo.InvariantCulture);
+
+            Assert.Equal(TimeSpan.FromSeconds(10), result);
+        }
+
         [Fact]
         public void Can_Convert_Int_To_Enum()
         {