Freigeben über


EnumToBoolConverter

EnumToBoolConverter ist ein unidirektionaler Konverter, mit dem Sie einen Enum-Wert in einen entsprechenden bool-Wert konvertieren können, basierend darauf, ob er einer Reihe von angegebenen Enumerationswerten entspricht. Er ist nützlich, wenn eine Auflistung von Werten gebunden wird, die einen Enumerationstyp an eine boolesche Steuerelementeigenschaft wie die IsVisible-Eigenschaft darstellen.

Die Convert-Methode gibt den bereitgestellten value zurück, der in bool konvertiert wurde, je nachdem, ob value einem der definierten TrueValues oder dem angegebenen CommandParameter entspricht.

Die Methode ConvertBack wird nicht unterstützt.

Hinweis

Beachten Sie, dass der Wert true, mit dem verglichen werden soll, auf folgende Weise angegeben werden kann:

  1. als TrueValue-Eigenschaft im Konverter.
  2. als ConverterParameter in der Konverterbindung,

Beachten Sie, dass die TrueValues-Eigenschaft Vorrang hat vor der ConverterParameter-Option hat.

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

In jedem der folgenden Beispiele wird die folgende Enumerationsdefinition verwendet:

namespace MyLittleApp;

public enum MyDevicePlatform
{
    Android,
    iOS,
    macOS,
    Tizen,
    Windows
}

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

EnumToBoolConverter 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:mylittleapp="clr-namespace:MyLittleApp"
             x:Class="MyLittleApp.MainPage">
    <ContentPage.Resources>
         <ResourceDictionary>
             <toolkit:EnumToBoolConverter x:Key="MobileConverter">
                <toolkit:EnumToBoolConverter.TrueValues>
                    <mylittleapp:MyDevicePlatform>Android</mylittleapp:MyDevicePlatform>
                    <mylittleapp:MyDevicePlatform>iOS</mylittleapp:MyDevicePlatform>
                </toolkit:EnumToBoolConverter.TrueValues>
            </toolkit:EnumToBoolConverter>
         </ResourceDictionary>
    </ContentPage.Resources>

    <VerticalStackLayout>
        <Picker ItemsSource="{Binding Platforms}"
                SelectedItem="{Binding SelectedPlatform}" />
        <Label IsVisible="{Binding SelectedPlatform, Converter={StaticResource MobileConverter}}"
               Text="I am visible when the Picker value is Android or iOS."/>
    </VerticalStackLayout>
</ContentPage>

Es ist auch möglich, den Konverterparameter zu übergeben:

<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"
             x:Class="MyLittleApp.MainPage">
    <ContentPage.Resources>
         <ResourceDictionary>
             <toolkit:EnumToBoolConverter x:Key="PlatformConverter" />
         </ResourceDictionary>
    </ContentPage.Resources>

    <VerticalStackLayout>
        <Picker ItemsSource="{Binding Platforms}"
                SelectedItem="{Binding SelectedPlatform}" />
        <Label IsVisible="{Binding SelectedPlatform, Converter={StaticResource PlatformConverter}, ConverterParameter={x:Static vm:MyDevicePlatform.Tizen}}"
               Text="I am visible when the Picker value is Tizen."/>
    </VerticalStackLayout>
</ContentPage>

C#

EnumToBoolConverter kann wie folgt in C# verwendet werden:

class EnumToBoolConverterPage : ContentPage
{
    public EnumToBoolConverterPage()
    {
        var picker = new Picker();
        picker.SetBinding(Picker.ItemsSourceProperty, static (ViewModel vm) => vm.Platforms);
        picker.SetBinding(Picker.SelectedItemProperty, static (ViewModel vm) => vm.SelectedPlatform);

        var label = new Label
        {
            Text = "I am visible when the Picker value is Tizen."
        };

        label.SetBinding(
            Label.IsVisibleProperty,
            new Binding(
                static (ViewModel vm) => vm.SelectedPlatform,
                converter: new EnumToBoolConverter(),
                converterParameter: MyDevicePlatform.Tizen));

        Content = new VerticalStackLayout
        {
            Children = { picker, label }
        };
    }
}

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 EnumToBoolConverterPage : ContentPage
{
    public EnumToBoolConverterPage()
    {
        Content = new VerticalStackLayout
        {
            Children = 
            {
                new Picker()
                    .Bind(
                        Picker.ItemsSourceProperty, 
                        static (ViewModel vm) => vm.Platforms)
                    .Bind(
                        Picker.SelectedItemProperty,
                        static (ViewModel vm) => vm.SelectedPlatform),

                new Label()
                    .Text("I am visible when the Picker value is Tizen.")
                    .Bind(
                        Label.IsVisibleProperty,
                        static (ViewModel vm) => vm.SelectedPlatform,
                        converter: new EnumToBoolConverter(),
                        converterParameter: MyDevicePlatform.Tizen)
            }
        };
    }
}

Eigenschaften

Eigenschaft Typ Beschreibung
TrueValues IList<Enum> Enumerationswerte, die in true (optional) konvertiert werden.

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 EnumToBoolConverter über das GitHub-Repository für das .NET MAUI Community Toolkit.