次の方法で共有


StateToBooleanConverter

StateToBooleanConverter は、指定された値が特定の LayoutState であるかどうかに基づいて boolean の結果を返す一方向コンバーターです。

Convert では、指定された値が特定の LayoutState であるかどうかに基づいて boolean の結果を返します。 LayoutState 列挙型はツールキットによって提供され、使用可能な値を提供します。

  • None
  • Loading
  • Saving
  • Success
  • Error
  • Empty
  • Custom

Note

想定される LayoutState は、次の優先順位で指定できます。

  1. コンバーター バインディングにおける ConverterParameter として。これは StateToCompare プロパティより優先されます
  2. コンバーターで StateToCompare プロパティとして

ConvertBack メソッドはサポートされていません。

BaseConverter プロパティ

基底クラス public abstract class BaseConverter には、以下のプロパティが実装されています。

プロパティ 説明
DefaultConvertReturnValue IValueConverter.Convert(object?, Type, object?, CultureInfo?)Exception をスローしたときに返される既定値。 この値は、CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverterstrue に設定されている場合に使用されます。
DefaultConvertBackReturnValue IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?)Exception をスローしたときに返される既定値。 この値は、CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverterstrue に設定されている場合に使用されます。

ICommunityToolkitValueConverter プロパティ

public interface ICommunityToolkitValueConverter には以下のプロパティが実装されています。

プロパティ タイプ 説明
DefaultConvertReturnValue object? IValueConverter.Convert(object?, Type, object?, CultureInfo?)Exception をスローしたときに返される既定値。 この値は、CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverterstrue に設定されている場合に使用されます。
DefaultConvertBackReturnValue object? IValueConverter.ConvertBack(object?, Type, object?, CultureInfo?)Exception をスローしたときに返される既定値。 この値は、CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConverterstrue に設定されている場合に使用されます。

構文

次の例では、このコンバーターを使用して、Button Commandで変更された LayoutState プロパティに基づいて Label コントロールの表示を変更する方法を示します。

XAML

XAML 名前空間を含める

XAML でこのツールキットを使用するには、次の xmlns をページまたはビューに追加する必要があります。

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

したがって、以下のコードは、

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

次のように、xmlns を含むように変更されます。

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

StateToBooleanConverter を使用する

StateToBooleanConverter は、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"
             x:Class="CommunityToolkit.Maui.Sample.Pages.Converters.StateToBooleanConverterPage">

    <ContentPage.Resources>
        <ResourceDictionary>
            <toolkit:StateToBooleanConverter x:Key="StateToBooleanConverter" StateToCompare="Success" />
        </ResourceDictionary>
    </ContentPage.Resources>

    <VerticalStackLayout VerticalOptions="Center">
        <Label
            HorizontalOptions="Center"
            IsVisible="{Binding LayoutState, Converter={StaticResource StateToBooleanConverter}}"
            Text="The state is Success!"
            VerticalOptions="Center" />
        <Button Command="{Binding ChangeLayoutCommand}" Text="Change state" />
    </VerticalStackLayout>

</ContentPage>

C#

StateToBooleanConverter は、C# では次のように使用できます。

class StateToBooleanConverterPage : ContentPage
{
    public StateToBooleanConverterPage()
    {
        var label = new Label
        {
            HorizontalOptions = LayoutOptions.Center,
            Text = "The state is Success!",
            VerticalOptions = LayoutOptions.Center
        };

        label.SetBinding(
            Label.IsVisibleProperty,
            new Binding(
                static (ViewModel vm) => vm.LayoutState,
                converter: new StateToBooleanConverter { StateToCompare = LayoutState.Success }));

        var button = new Button
        {
            Text = "Change state"
        };
    
        button.SetBinding(
            Button.CommandProperty,
            nameof(ViewModel.ChangeLayoutCommand));

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

C# Markup

この CommunityToolkit.Maui.Markup パッケージは、C# でこのコンバーターを使用するためのより簡潔な方法を提供します。

using CommunityToolkit.Maui.Markup;

class StateToBooleanConverterPage : ContentPage
{
    public StateToBooleanConverterPage()
    {
        Content = new VerticalStackLayout
        {
            Children = 
            {
                new Label()
                    .Text("The state is Success!")
                    .CenterHorizontal()
                    .CenterVertical()
                    .Bind(
                        Label.IsVisibleProperty,
                        static (ViewModel vm) => vm.LayoutState,
                        converter: new StateToBooleanConverter { StateToCompare = LayoutState.Success }),

                new Button()
                    .Text("Change state")
                    .BindCommand(static (ViewModel vm) => vm.ChangeLayoutCommand)
            }
        };
    }
}

このコンバーターの動作の例は「.NET MAUI Community Toolkit サンプル アプリケーション」で確認できます。

API

StateToBooleanConverter のソース コードは、.NET MAUI Community Toolkit の GitHub リポジトリにあります。