EnumToIntConverter
EnumToIntConverter
ist ein Konverter, mit dem Sie einen Standardwert Enum
(Erweiterung int) in seinen einfachen int
-Wert konvertieren können. Dies ist nützlich, wenn Sie eine Sammlung von Werten, die einen Enumerationstyp mit Standardnummerierung darstellen, an ein Steuerelement wie Picker
binden.
Hinweis
Die Eigenschaft ConverterParameter
ist erforderlich und sollte auf den Typ der Enumeration festgelegt werden, in den die Konvertierung erfolgt, wenn Sie eine TwoWay
- oder OneWayToSource
-Bindung verwenden. Andernfalls wird eine ArgumentNullException
ausgelöst. Dadurch kann überprüft werden, ob es sich bei dem int
-Wert um einen gültigen Wert für die Enumeration handelt.
Zu Lokalisierungszwecken oder aufgrund anderer Anforderungen müssen Enumerationswerte häufig in eine für Menschen lesbare Zeichenfolge konvertiert werden. In diesem Fall kann, wenn der Benutzer einen Wert auswählt, der resultierende SelectedIndex
einfach in den zugrunde liegenden enum
-Wert konvertiert werden, ohne dass zusätzliche Arbeit im zugehörigen ViewModel erforderlich ist.
BaseConverter-Eigenschaften
Die folgenden Eigenschaften werden in der Basisklasse public abstract class BaseConverter
implementiert:
Eigenschaft | Beschreibung |
---|---|
DefaultConvertReturnValue |
Standardwert, der zurückgegeben werden soll, wenn IValueConverter.Convert(object?, Type, object?, CultureInfo?) eine Exception auslöst. Dieser Wert wird verwendet, wenn CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters auf true festgelegt ist. |
DefaultConvertBackReturnValue |
Standardwert, der zurückgegeben werden soll, wenn IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) eine Exception auslöst. Dieser Wert wird verwendet, wenn CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters auf true festgelegt ist. |
ICommunityToolkitValueConverter-Eigenschaften
Die folgenden Eigenschaften werden im public interface ICommunityToolkitValueConverter
implementiert:
Eigenschaft | Typ | Beschreibung |
---|---|---|
DefaultConvertReturnValue |
object? |
Standardwert, der zurückgegeben werden soll, wenn IValueConverter.Convert(object?, Type, object?, CultureInfo?) eine Exception auslöst. Dieser Wert wird verwendet, wenn CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters auf true festgelegt ist. |
DefaultConvertBackReturnValue |
object? |
Standardwert, der zurückgegeben werden soll, wenn IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) eine Exception auslöst. Dieser Wert wird verwendet, wenn CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters auf true festgelegt ist. |
Syntax
XAML
Einbinden des XAML-Namespace
Um das Toolkit in XAML verwenden zu können, muss der folgende xmlns
-Abschnitt zu Ihrer Seite oder Ansicht hinzugefügt werden:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Der folgende Abschnitt:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
Würde dann geändert werden, um xmlns
einzubinden:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
Verwenden von EnumToIntConverter
EnumToIntConverter
kann wie folgt in XAML verwendet werden:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:vm="clr-namespace:CommunityToolkit.Maui.Sample.ViewModels.Converters"
x:Class="MyLittleApp.MainPage">
<ContentPage.Resources>
<ResourceDictionary>
<toolkit:EnumToIntConverter x:Key="EnumToIntConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<VerticalStackLayout Padding="10,10" Spacing="10">
<Label Text="The EnumToIntConverter is a converter that allows users to convert a standard enum (extending int) to its underlying primitive int type."
TextColor="{StaticResource NormalLabelTextColor}" />
<Label Text="Selecting a value from the picker will change the enum property in the view model"
TextColor="{StaticResource NormalLabelTextColor}" />
<Picker ItemsSource="{Binding AllStates}"
SelectedIndex="{Binding SelectedState, Converter={StaticResource EnumToIntConverter}, ConverterParameter={x:Type vm:IssueState}}"
TextColor="{StaticResource NormalLabelTextColor}" />
<Label Text="This label binds to the SelectedIndex property of the picker, both use EnumToIntConverter, so no int properties are necessary in ViewModel"
TextColor="{StaticResource NormalLabelTextColor}" />
<Label Text="{Binding Path=SelectedState, Converter={StaticResource EnumToIntConverter}}"
TextColor="{StaticResource NormalLabelTextColor}" />
</VerticalStackLayout>
</ContentPage>
C#
EnumToIntConverter
kann wie folgt in C# verwendet werden:
class EnumToIntConverterPage : ContentPage
{
public EnumToIntConverterPage()
{
Picker picker = new Picker { Title = "EnumToIntConverter" };
picker.SetBinding(Picker.ItemsSourceProperty, static (ViewModel vm) => vm .AllStates);
picker.SetBinding(Picker.SelectedItemProperty, static (ViewModel vm) => vm.SelectedState);
Content = new StackLayout
{
Margin = new Thickness(20),
Children =
{
new Label
{
Text = "The EnumToIntConverter is a converter that allows users to convert a standard enum (extending int) to its underlying primitive int type.",
FontAttributes = FontAttributes.Bold,
HorizontalOptions = LayoutOptions.Center
},
picker
}
};
}
C#-Markup
Das Paket CommunityToolkit.Maui.Markup
bietet eine viel präzisere Möglichkeit, diesen Konverter in C# zu verwenden.
using CommunityToolkit.Maui.Markup;
class EnumToIntConverterPage : ContentPage
{
public EnumToIntConverterPage()
{
Content = new StackLayout {
new Picker()
.Bind(
Picker.ItemSourceProperty,
static (ViewModel vm) => vm.AllStates)
.Bind(
Picker.SelectedIndexProperty,
static (ViewModel vm) => vm.SelectedState),
new Label()
.Bind(
Label.TextProperty,
static (ViewModel vm) => vm.SelectedState,
converter: new EnumToIntConverter()),
}
}
}
Beispiele
Ein Beispiel für diesen Konverter in Aktion finden Sie in der Beispielanwendung für das .NET MAUI Community Toolkit.
API
Sie finden den Quellcode für EnumToIntConverter
über das GitHub-Repository für das .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit