소스 검색

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

Use TypeConverters in TypeUtilities.TryConvert
Jumar Macato 5 년 전
부모
커밋
6b15c84a01
2개의 변경된 파일21개의 추가작업 그리고 0개의 파일을 삭제
  1. 9 0
      src/Avalonia.Base/Utilities/TypeUtilities.cs
  2. 12 0
      tests/Avalonia.Base.UnitTests/Data/DefaultValueConverterTests.cs

+ 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()
         {