diff --git a/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml b/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml
new file mode 100644
index 000000000..5fe908569
--- /dev/null
+++ b/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml.cs b/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml.cs
new file mode 100644
index 000000000..937bb5667
--- /dev/null
+++ b/samples/XCT.Sample/Pages/Converters/EnumToListConverterPage.xaml.cs
@@ -0,0 +1,10 @@
+namespace Xamarin.CommunityToolkit.Sample.Pages.Converters
+{
+ public partial class EnumToListConverterPage : BasePage
+ {
+ public EnumToListConverterPage()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/samples/XCT.Sample/ViewModels/Converters/ConvertersGalleryViewModel.cs b/samples/XCT.Sample/ViewModels/Converters/ConvertersGalleryViewModel.cs
index b18452a3d..36c874798 100644
--- a/samples/XCT.Sample/ViewModels/Converters/ConvertersGalleryViewModel.cs
+++ b/samples/XCT.Sample/ViewModels/Converters/ConvertersGalleryViewModel.cs
@@ -107,6 +107,10 @@ protected override IEnumerable CreateItems() => new[]
typeof(StringToListConverterPage),
nameof(StringToListConverter),
"A converter that splits a string by the separator and returns the enumerable sequence of strings as the result."),
+ new SectionModel(
+ typeof(EnumToListConverterPage),
+ nameof(EnumToListConverter),
+ "A converter that returns the enumerable sequence of enum as the result."),
new SectionModel(
typeof(CompareConverterPage),
nameof(CompareConverter),
diff --git a/samples/XCT.Sample/ViewModels/Converters/EnumToListConverterViewModel.cs b/samples/XCT.Sample/ViewModels/Converters/EnumToListConverterViewModel.cs
new file mode 100644
index 000000000..51208f07f
--- /dev/null
+++ b/samples/XCT.Sample/ViewModels/Converters/EnumToListConverterViewModel.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Xamarin.CommunityToolkit.Behaviors;
+using Xamarin.CommunityToolkit.UI.Views;
+using Xamarin.Forms;
+
+namespace Xamarin.CommunityToolkit.Sample.ViewModels.Converters
+{
+ public enum CustomEnum
+ {
+ A,
+ B,
+ C,
+ D,
+ E,
+ F
+ }
+
+ public class EnumToListConverterViewModel : BaseViewModel
+ {
+ List enumTypes;
+ Type? selectedEnumType;
+ object? selectedItem = null;
+
+ public EnumToListConverterViewModel()
+ {
+ enumTypes = new List() { typeof(CustomEnum), typeof(BadgePosition), typeof(CameraCaptureMode), typeof(CharacterType) };
+ selectedEnumType = enumTypes.FirstOrDefault();
+ }
+
+ public List EnumTypes
+ {
+ get => enumTypes;
+ set => SetProperty(ref enumTypes, value);
+ }
+
+ public Type? SelectedEnumType
+ {
+ get => selectedEnumType;
+ set => SetProperty(ref selectedEnumType, value);
+ }
+
+ public object? SelectedItem
+ {
+ get => selectedItem;
+ set => SetProperty(ref selectedItem, value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/StringToListConverter_Tests.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/StringToListConverter_Tests.cs
index 6324cb11b..40ef343c5 100644
--- a/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/StringToListConverter_Tests.cs
+++ b/src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Converters/StringToListConverter_Tests.cs
@@ -32,17 +32,17 @@ public void StringToListConverter(object value, object parameter, object expecte
[TestCase(0)]
public void InValidConverterValuesThrowArgumenException(object value)
{
- var listToStringConverter = new ListToStringConverter();
+ var stringToListConverter = new StringToListConverter();
- Assert.Throws(() => listToStringConverter.Convert(value, null, null, null));
+ Assert.Throws(() => stringToListConverter.Convert(value, null, null, null));
}
[TestCase(0)]
public void InValidConverterParametersThrowArgumenException(object parameter)
{
- var listToStringConverter = new ListToStringConverter();
+ var stringToListConverter = new StringToListConverter();
- Assert.Throws(() => listToStringConverter.Convert(new object[0], null, parameter, null));
+ Assert.Throws(() => stringToListConverter.Convert(new object[0], null, parameter, null));
}
}
}
\ No newline at end of file
diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/EnumToListConverter.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/EnumToListConverter.shared.cs
new file mode 100644
index 000000000..8ba398135
--- /dev/null
+++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/EnumToListConverter.shared.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Globalization;
+using Xamarin.CommunityToolkit.Extensions.Internals;
+using Xamarin.Forms;
+
+namespace Xamarin.CommunityToolkit.Converters
+{
+ ///
+ /// A converter that retrieves an array of the values of the constants in a specified enumeration.
+ ///
+ public class EnumToListConverter : ValueConverterExtension, IValueConverter
+ {
+ ///
+ /// Retrieves an array of the values of the constants in a specified enumeration.
+ ///
+ /// The Enum.
+ /// The type of the binding target property. This is not implemented.
+ /// Additional parameter for the converter to handle. This is not implemented.
+ /// The culture to use in the converter. This is not implemented.
+ /// An array that contains the values of the constants in .
+ public object? Convert(object? value, Type? targetType, object? parameter, CultureInfo? culture)
+ {
+ if (value is Type type)
+ return Enum.GetValues(type);
+ return value;
+ }
+
+ ///
+ /// This method is not implemented and will throw a .
+ ///
+ /// N/A
+ /// N/A
+ /// N/A
+ /// N/A
+ /// N/A
+ public object? ConvertBack(object? value, Type? targetType, object? parameter, CultureInfo? culture)
+ => throw new NotImplementedException();
+ }
+}
\ No newline at end of file
diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ObjectToNameConverter.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ObjectToNameConverter.shared.cs
new file mode 100644
index 000000000..d1f19fb2d
--- /dev/null
+++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Converters/ObjectToNameConverter.shared.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Globalization;
+using Xamarin.CommunityToolkit.Extensions.Internals;
+using Xamarin.Forms;
+
+namespace Xamarin.CommunityToolkit.Converters
+{
+ ///
+ /// A converter that returns the name of the object.
+ ///
+ public class ObjectToNameConverter : ValueConverterExtension, IValueConverter
+ {
+ ///
+ /// Returns the name of the name of the object.
+ ///
+ /// The string to split.
+ /// The type of the binding target property. This is not implemented.
+ /// The string or strings that delimits the substrings in this string. This overrides the value in and .
+ /// The culture to use in the converter. This is not implemented.
+ /// An array whose elements contain the substrings in this string that are delimited by or, if set, or, if set, .
+ public object? Convert(object value, Type? targetType, object? parameter, CultureInfo? culture)
+ {
+ if (value is Type type)
+ return type.Name;
+
+ return string.Empty;
+ }
+
+ ///
+ /// This method is not implemented and will throw a .
+ ///
+ /// N/A
+ /// N/A
+ /// N/A
+ /// N/A
+ /// N/A
+ public object? ConvertBack(object? value, Type? targetType, object? parameter, CultureInfo? culture)
+ => throw new NotImplementedException();
+ }
+}
\ No newline at end of file