diff --git a/Microsoft.Toolkit.Uwp.UI/Converters/StringFormatConverter.cs b/Microsoft.Toolkit.Uwp.UI/Converters/StringFormatConverter.cs
index cb01f422c3f..fdf0d9b2bdc 100644
--- a/Microsoft.Toolkit.Uwp.UI/Converters/StringFormatConverter.cs
+++ b/Microsoft.Toolkit.Uwp.UI/Converters/StringFormatConverter.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.Globalization;
using Windows.UI.Xaml.Data;
namespace Microsoft.Toolkit.Uwp.UI.Converters
@@ -18,29 +19,33 @@ public class StringFormatConverter : IValueConverter
/// Object to transform to string.
/// The type of the target property, as a type reference
/// An optional parameter to be used in the string.Format method.
- /// The language of the conversion (not used).
+ /// The language of the conversion. If language is null or empty then will be used.
/// Formatted string.
public object Convert(object value, Type targetType, object parameter, string language)
{
- if (value == null)
+ if (value is null)
{
return null;
}
- if (parameter == null)
+ // Retrieve the format string and use it to format the value.
+ string formatString = parameter as string;
+ if (string.IsNullOrEmpty(formatString))
{
- return value;
+ // If the format string is null or empty, simply call ToString()
+ // on the value.
+ return value.ToString();
}
try
{
- return string.Format((string)parameter, value);
+ CultureInfo culture = string.IsNullOrWhiteSpace(language) ? CultureInfo.InvariantCulture : new CultureInfo(language);
+ return string.Format(culture, formatString, value);
}
catch
{
+ return value;
}
-
- return value;
}
///
diff --git a/UnitTests/UnitTests.UWP/Converters/Test_StringFormatConverter.cs b/UnitTests/UnitTests.UWP/Converters/Test_StringFormatConverter.cs
index 8bf74420b30..74696aa7108 100644
--- a/UnitTests/UnitTests.UWP/Converters/Test_StringFormatConverter.cs
+++ b/UnitTests/UnitTests.UWP/Converters/Test_StringFormatConverter.cs
@@ -5,58 +5,63 @@
using Microsoft.Toolkit.Uwp.UI.Converters;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
+using System.Globalization;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
namespace UnitTests.Converters
{
[TestClass]
public class Test_StringFormatConverter
{
- private static readonly object NullString = null;
private static readonly object NotEmptyString = "Hello, world";
private static readonly DateTime Date = DateTime.Now;
-
+
[TestCategory("Converters")]
[TestMethod]
- public void WhenValueIsNull_ThenReturnNull()
+ [DataRow(null)]
+ [DataRow("en-us")]
+ public void WhenValueIsNull_ThenReturnNull(string language)
{
var converter = new StringFormatConverter();
- var result = converter.Convert(NullString, typeof(string), NullString, "en-us");
+ var result = converter.Convert(null, typeof(string), null, language);
+
Assert.IsNull(result);
}
[TestCategory("Converters")]
[TestMethod]
- public void WhenValueExistsAndParameterIsNull_ThenReturnValue()
+ [DataRow(null)]
+ [DataRow("en-us")]
+ public void WhenValueExistsAndParameterIsNull_ThenReturnValue(string language)
{
var converter = new StringFormatConverter();
- var result = converter.Convert(NotEmptyString, typeof(string), NullString, "en-us");
+ var result = converter.Convert(NotEmptyString, typeof(string), null, language);
+
Assert.AreEqual(NotEmptyString, result);
}
[TestCategory("Converters")]
[TestMethod]
- public void WhenParameterIsTimeFormat_ThenReturnValueOfTimeFormat()
+ [DataRow(null)]
+ [DataRow("en-us")]
+ public void WhenParameterIsInvalidFormat_ThenReturnValue(string language)
{
var converter = new StringFormatConverter();
- var result = converter.Convert(Date, typeof(string), "{0:HH:mm}", "en-us");
- Assert.AreEqual(Date.ToString("HH:mm"), result);
- }
+ var result = converter.Convert(Date, typeof(string), "{1:}", language);
- [TestCategory("Converters")]
- [TestMethod]
- public void WhenParameterIsInvalidFormat_ThenReturnValue()
- {
- var converter = new StringFormatConverter();
- var result = converter.Convert(Date, typeof(string), "{1:}", "en-us");
Assert.AreEqual(Date, result);
}
[TestCategory("Converters")]
[TestMethod]
- public void WhenParameterIsNotAString_ThenReturnValue()
+ [DataRow(null)]
+ [DataRow("en-us")]
+ public void WhenParameterIsNotAString_ThenReturnValue(string language)
{
var converter = new StringFormatConverter();
- var result = converter.Convert(NotEmptyString, typeof(string), 172, "en-us");
+ var result = converter.Convert(NotEmptyString, typeof(string), 172, language);
+
Assert.AreEqual(NotEmptyString, result);
}
}