Udostępnij za pośrednictwem


EnumToIntConverter

Jest EnumToIntConverter to konwerter, który umożliwia konwertowanie standardu Enum (rozszerzanie int) na podstawowy typ pierwotny int . Jest to przydatne w przypadku powiązania kolekcji wartości reprezentujących typ wyliczenia z domyślnym numerowaniem do kontrolki, takiej jak Picker.

Uwaga

Właściwość jest wymagana ConverterParameter i powinna być ustawiona na typ wyliczenia, na który ma zostać przekonwertowana z powrotem, w przypadku używania TwoWay elementu lub OneWayToSource powiązania. W przeciwnym razie zostanie zgłoszony element ArgumentNullException . Pozwala to sprawdzić, czy int wartość jest prawidłowa w wyliczeniem.

W celach lokalizacyjnych lub ze względu na inne wymagania wartości wyliczenia często muszą być konwertowane na ciąg czytelny dla człowieka. W takim przypadku, gdy użytkownik wybierze wartość, wynik SelectedIndex można łatwo przekonwertować na wartość bazową enum bez konieczności dodatkowej pracy w skojarzonym modelu ViewModel.

Właściwości obiektu BaseConverter

Następujące właściwości są implementowane w klasie bazowej: public abstract class BaseConverter

Właściwości opis
DefaultConvertReturnValue Wartość domyślna, która ma być zwracana, gdy IValueConverter.Convert(object?, Type, object?, CultureInfo?) zgłasza wartość Exception. Ta wartość jest używana, gdy właściwość CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters jest ustawiona na truewartość .
DefaultConvertBackReturnValue Wartość domyślna, która ma być zwracana, gdy IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) zgłasza wartość Exception. Ta wartość jest używana, gdy właściwość CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters jest ustawiona na truewartość .

Właściwości ICommunityToolkitValueConverter

Następujące właściwości są implementowane w pliku public interface ICommunityToolkitValueConverter:

Właściwość Type Opis
DefaultConvertReturnValue object? Wartość domyślna, która ma być zwracana, gdy IValueConverter.Convert(object?, Type, object?, CultureInfo?) zgłasza wartość Exception. Ta wartość jest używana, gdy właściwość CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters jest ustawiona na truewartość .
DefaultConvertBackReturnValue object? Wartość domyślna, która ma być zwracana, gdy IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?) zgłasza wartość Exception. Ta wartość jest używana, gdy właściwość CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverters jest ustawiona na truewartość .

Składnia

XAML

Dołączanie przestrzeni nazw XAML

Aby można było używać zestawu narzędzi w języku XAML, należy dodać następujące xmlns elementy do strony lub widoku:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

W związku z tym następujące elementy:

<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>

Zostanie zmodyfikowana tak, aby zawierała następujące xmlns elementy:

<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>

Korzystanie z enumToIntConverter

Można EnumToIntConverter go użyć w następujący sposób w języku XAML:

<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#

Można EnumToIntConverter go użyć w następujący sposób w języku C#:

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
            }
        };
}

Znaczniki języka C#

Nasz CommunityToolkit.Maui.Markup pakiet zapewnia znacznie bardziej zwięzły sposób używania tego konwertera w języku C#.

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()),
        }
    }
}

Przykłady

Przykład tego konwertera można znaleźć w aplikacji przykładowej zestawu narzędzi .NET MAUI Community Toolkit.

interfejs API

Kod źródłowy można EnumToIntConverter znaleźć w repozytorium GitHub zestawu narzędzi .NET MAUI Community Toolkit.