.NET MAUI コンバーター

.NET マルチプラットフォーム アプリ UI (.NET MAUI) データ バインディングは、通常、ソース プロパティからターゲット プロパティにデータを転送し、場合によってはターゲット プロパティからソース プロパティにデータを転送します。 この転送は、ソースプロパティとターゲットプロパティが同じ型の場合、または暗黙的な変換によって一方の型を他の型に変換できる場合に簡単です。 そうでない場合は、型変換を行う必要があります。

コンバーターの詳細については、.NET MAUIドキュメントを参照してください。

.NET MAUI Community Toolkit コンバーター

.NET MAUI Community Toolkit には、開発者の生活を容易にするために、事前に構築された再利用可能なコンバーターのコレクションが用意されています。 ツールキットによって提供されるコンバーターを次に示します。

コンバータ Description
BoolToObjectConverter BoolToObjectConverterは、ユーザーがbool値バインディングを特定のオブジェクトに変換できるようにするコンバーターです。
ByteArrayToImageSourceConverter ByteArrayToImageSourceConverterは、ユーザーがbyte配列から受信値を変換し、ImageSourceを返すコンバーターです。
ColorToBlackOrWhiteConverter ColorToBlackOrWhiteConverterは、ユーザーが受信ColorColors.BlackまたはColors.Whiteのモノクロ値に変換できる一方向コンバーターです。
ColorToByteAlphaConverter ColorToByteAlphaConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 255 の値としてアルファ コンポーネントに変換できます。
ColorToByteBlueConverter ColorToByteBlueConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 255 の値として青色のコンポーネントに変換できます。
ColorToByteGreenConverter ColorToByteGreenConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 255 の値として緑色のコンポーネントに変換できます。
ColorToByteRedConverter ColorToByteRedConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 255 の値として赤のコンポーネントに変換できます。
ColorToCmykStringConverter ColorToCmykStringConverterは一方向コンバーターであり、ユーザーはColor値バインディングを CMYK string同等のものに変換できます。
ColorToCmykaStringConverter ColorToCmykaStringConverterは一方向コンバーターであり、ユーザーはColor値バインディングを同等の CMYKA string変換できます。
ColorToColorForTextConverter ColorToColorForTextConverterは一方向コンバーターであり、ユーザーは、受信Colorを人間の目に対して暗いと判断されたかどうかに基づいて、Colors.BlackまたはColors.Whiteのモノクロ値に変換できます。
ColorToDegreeHueConverter ColorToDegreeHueConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 360 の値として hue コンポーネントに変換できます。
ColorToGrayScaleColorConverter ColorToGrayScaleColorConverterは、ユーザーが受信Colorをグレースケール Colorに変換できる一方向コンバーターです。
ColorToHexRgbStringConverter ColorToHexRgbStringConverterは、ユーザーがColor値バインディングを、それに対応するRGBの16進数string表現に変換できるコンバーターです。
ColorToHexRgbaStringConverter ColorToHexRgbaStringConverterは、ユーザーがColor値バインディングを対応するRGBA 16進数のstring相当値に変換できるコンバーターです。
ColorToHslStringConverter ColorToHslStringConverterは一方向コンバーターであり、ユーザーはColor値バインディングを HSL string同等のものに変換できます。
ColorToHslaStringConverter ColorToHslaStringConverterは、ユーザーがColor値バインディングを HSLA string同等のものに変換できる一方向コンバーターです。
ColorToInverseColorConverter ColorToInverseColorConverterは、ユーザーが受信Colorを逆に変換できる一方向コンバーターです。
ColorToPercentBlackKeyConverter ColorToPercentBlackKeyConverterは、ユーザーが入力Colorを 0 から 1 の値としてキー コンポーネントに変換できる一方向コンバーターです。
ColorToPercentCyanConverter ColorToPercentCyanConverterは、ユーザーが受信Colorシアン成分に 0 から 1 の値として変換できる一方向コンバーターです。
ColorToPercentMagentaConverter ColorToPercentMagentaConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 1 の値としてマゼンタ コンポーネントに変換できます。
ColorToPercentYellowConverter ColorToPercentYellowConverterは一方向コンバーターであり、ユーザーは受信Colorを 0 から 1 の値として黄色のコンポーネントに変換できます。
ColorToRgbStringConverter ColorToRgbStringConverterは、ユーザーがColor値バインディングを RGB string同等の値に変換できるコンバーターです。
ColorToRgbaStringConverter ColorToRgbaStringConverterは一方向コンバーターであり、ユーザーはColor値バインディングを RGBA string同等のものに変換できます。
CompareConverter CompareConverterは、IComparableを実装する受信値を受け取り、指定された値と比較し、比較結果を返す一方向コンバーターです。
DateTimeOffsetConverter DateTimeOffsetConverterは、ユーザーがDateTimeOffsetDateTimeに変換できるコンバーターです
DoubleToIntConverter DoubleToIntConverterは、ユーザーが受信double値をintに変換できるようにするコンバーターです。 必要に応じて、ユーザーは Ratio プロパティを使用して変換に乗数を指定できます。
EnumToBoolConverter EnumToBoolConverterは一方向コンバーターであり、指定された列挙値のセットと等しいかどうかに基づいて、Enumを対応するboolに変換できます。 列挙型を表す値のコレクションを、 IsVisible プロパティなどのブール型コントロール プロパティにバインドする場合に便利です。
EnumToIntConverter EnumToIntConverterは、標準のEnum (拡張 int) を基になるプリミティブ int型に変換できるコンバーターです。 既定の番号付けを持つ列挙型を表す値のコレクションを、 Pickerなどのコントロールにバインドする場合に便利です。
ImageResourceConverter ImageResourceConverterは、埋め込みイメージ リソース ID を ImageSource に変換するコンバーターです。
IndexToArrayItemConverter IndexToArrayItemConverterは、int値バインディングを配列内の項目に変換できるコンバーターです。 データ バインドされる int 値は、配列へのアクセスに使用されるインデクサーを表します。 配列は、 ConverterParameterを介して渡されます。
IntToBoolConverter IntToBoolConverterは、ユーザーが受信int値をboolに変換できるようにするコンバーターです。
InvertedBoolConverter InvertedBoolConverterは、ユーザーがboolを逆に変換できるコンバーターです。truefalseになり、その逆も可能になります。
IsEqualConverter IsEqualConverterは、バインド値が別の指定した値と等しいかどうかを示すboolを返す一方向コンバーターです。
IsInRangeConverter IsInRangeConverterは、IComparableを実装する受信値と最小値と最大値を受け取り、最小値と最大値の間にある値の結果を返す一方向コンバーターです。
IsListNotNullOrEmptyConverter IsListNotNullOrEmptyConverterは、IEnumerablebool値に変換する一方向コンバーターです。
IsListNullOrEmptyConverter IsListNullOrEmptyConverterは、IEnumerablebool値に変換する一方向コンバーターです。
IsNotEqualConverter IsNotEqualConverterは、バインド値が別の指定された値と等しくないかどうかを示すboolを返す一方向コンバーターです。
IsNullConverter IsNullConverterは、ユーザーが受信バインディングをbool値に変換できるようにするコンバーターです。 この値は、受信バインディング値が null かどうかを表します。
IsNotNullConverter IsNotNullConverterは、ユーザーが受信バインディングをbool値に変換できるようにするコンバーターです。 この値は、受信バインディング値が null でない場合を表します。
IsStringNotNullOrEmptyConverter IsStringNotNullOrEmptyConverterは、バインド値が null ではなく、boolでないかを示すstring.Emptyを返す一方向コンバーターです。
IsStringNotNullOrWhiteSpaceConverter IsStringNotNullOrWhiteSpaceConverterは、バインド値が null ではなく、boolではなく、空白文字のみを含まないかどうかを示すstring.Emptyを返す一方向コンバーターです。
IsStringNullOrEmptyConverter IsStringNullOrEmptyConverterは、バインド値が null かboolかを示すstring.Emptyを返す一方向コンバーターです。
IsStringNullOrWhiteSpaceConverter IsStringNullOrWhiteSpaceConverterは、バインド値が null、bool、または空白文字のみを含むかどうかを示すstring.Emptyを返す一方向コンバーターです。
ItemTappedEventArgsConverter ItemTappedEventArgsConverterは、ユーザーが ItemTappedEventArgs オブジェクトから Item 値を抽出できるようにするコンバーターです。 その後、 EventToCommandBehavior と組み合わせて使用できます。
ListToStringConverter ListToStringConverterは、各メンバー間で指定された区切り記号を使用して、コレクションのメンバーの連結を返す一方向コンバーターです。
MathExpressionConverter MathExpressionConverterは、ユーザーがさまざまな算術演算を実行できるようにするコンバーターです。
MultiConverter MultiConverterは、すべての受信コンバーターを使用して受信値を順番に変換します。
MultiMathExpressionConverter MultiMathExpressionConverterは、ユーザーがMultiBindingを使用して複数の値を持つさまざまな算術演算を実行できるようにするコンバーターです。
SelectedItemEventArgsConverter SelectedItemEventArgsConverterは、ユーザーが SelectedItemEventArgs オブジェクトから Item 値を抽出できるようにするコンバーターです。 その後、 EventToCommandBehavior と組み合わせて使用できます。
StateToBoolConverter StateToBoolConverterは、指定された値が特定のbooleanのかどうかに基づいてLayoutState結果を返す一方向コンバーターです。
StringToListConverter StringToListConverterは、1 つ以上の区切り記号に基づいて入力文字列を分割することによって部分文字列のセットを返す一方向コンバーターです。
TextCaseConverter TextCaseConverterは、ユーザーが入力されるstring型のバインディングの文字ケースを変換できるようにする一方向コンバーターです。 Type プロパティは、文字列に適用する大文字/小文字の形式を指定するために使用されます。
VariableMultiValueConverter VariableMultiValueConverterは、ユーザーがboolを介してMultiBinding値を 1 つのboolに変換できるコンバーターです。

.NET MAUI Community Toolkit Converter を作成する

.NET MAUI Community Toolkit では、.NET MAUIによって提供される IValueConverter インターフェイスの型セーフな実装が提供されるため、開発者はより簡潔でタイプ セーフなコンバーターを簡単に記述できます。 ツールキットには、次のオプションが用意されています

双方向コンバーター

BaseConverter クラスを使用すると、開発者は受信値の型と、双方向バインディングをサポートするIValueConverter実装の送信値の型を定義できます。 次の例は、bool値をColors.Green場合はtrueに変換し、Colors.Red場合はfalseするコンバーターを作成する方法を示しています。

public class BoolToColorConverter : BaseConverter<bool, Color>
{
    public override Color DefaultConvertReturnValue { get; set; } = Colors.Orange;

    public override bool DefaultConvertBackReturnValue { get; set; } = false;

    public override string ConvertFrom(bool value, CultureInfo? culture)
    {
        return value ? Colors.Green : Colors.Red;
    }

    public override int ConvertBackTo(Color value, CultureInfo? culture)
    {
        return value == Colors.Green;
    }
}

DefaultConvertReturnValue は基本実装で使用され、ConvertFrom メソッド内で例外がスローされると返されます。

DefaultConvertBackReturnValue はベース実装で使用され、ConvertBackTo メソッド内で例外がスローされたときに返されます。

Warning

コンバーターは、受信値または送信値が想定される型でない場合、 ArgumentException をスローします。 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConvertersfalse に設定することで、例外のスロー処理を無効にできます。

一方向コンバーター

BaseConverterOneWay クラスを使用すると、開発者は、受信値の型と、一方向のバインドをサポートするIValueConverter実装の送信値の型を定義できます。 次の例は、bool値をColors.Green場合はtrueに変換し、Colors.Red場合はfalseするコンバーターを作成する方法を示しています。

public class BoolToColorConverter : BaseConverterOneWay<bool, Color>
{
    public override Color DefaultConvertReturnValue { get; set; } = Colors.Orange

    public override string ConvertFrom(bool value, CultureInfo? culture)
    {
        return value ? Colors.Green : Colors.Red;
    }
}

DefaultConvertReturnValue は基本実装で使用され、ConvertFrom メソッド内で例外がスローされた場合は返されます。

Warning

コンバーターは、入力値または出力値のいずれかが期待される型でない場合、ArgumentException をスローします。 CommunityToolkit.Maui.Options.ShouldSuppressExceptionsInConvertersfalse に設定することで、例外がスローされることを無効にできます。 コンバーターは、双方向バインディングで使用した場合、NotSupportedException をスローします。