サーチ…


パラメーター

パラメータ詳細
変換元の値
targetType 変換先の型
パラメータコンバージョンの仕組みを制御するオプションの値
文化 CultureInfoオブジェクト - 必要なローカリゼーション

備考

Convertメソッドは、ソース(通常はビューモデル)からターゲット(通常はコントロールのプロパティ)に値を変換します。

ConvertBackメソッドは、ターゲットからの値をソースに戻します。バインディングがTwoWayまたはOneWayToSource場合にのみ必要です。

ConvertBackがサポートされていない場合、つまり変換前値と変換後値の間に1対1のマッピングがない場合、 ConvertBackメソッドでDependencyProperty.UnsetValue返すのが一般的です。これは、予期しない実行時エラーを回避するため、例外(例: NotImplementedException )を投げるよりも優れた選択肢です。また、 DependencyProperty.UnsetValueがコンバーターによって返された場合、バインディングはFallbackValue恩恵を受けることができます。

IsCheckedコンバーターへの文字列

XAMLの場合:

<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
                         Converter={StaticResource StringToIsCheckedConverter},
                         ConverterParameter=Male}"
             Content="Male"/>

<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
                         Converter={StaticResource StringToIsCheckedConverter},
                         ConverterParameter=Female}"
             Content="Female"/>

C#クラス:

public class StringToIsCheckedConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = (string)value;
        string test = (string)parameter;
        return input == test;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null || !(value is bool))
        {
            return string.Empty;
        }
        if (parameter == null || !(parameter is string))
        {
            return string.Empty;
        }
        if ((bool)value)
        {
            return parameter.ToString();
        }
        else
        {
            return string.Empty;
        }
    }
}

コンバータ101

XAMLコントロールには、 DataContextまたは他のコントロールからのオブジェクトにバインドできる依存プロパティがあります。バインドされるオブジェクトのタイプがターゲットDependencyPropertyタイプと異なる場合、 コンバータを使用してあるタイプを別のタイプに適合させることができる。

コンバーターは、 System.Windows.Data.IValueConverterまたはSystem.Windows.Data.IMultiValueConverter実装するクラスです。 WPFはすぐに使用できるコンバータを実装していますが、開発者はカスタム実装で使用することがよくあります。

XAMLでコンバータを使用するには、 Resourcesセクションでインスタンスをインスタンス化できます。以下の例では、 System.Windows.Controls.BooleanToVisibilityConverterが使用されます。

<UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>

x:Key要素が定義されていることに注目してください。この要素は、バインディング内のBooleanToVisibilityConverterのインスタンスを参照するために使用されます。

<TextBlock Text="This will be hidden if property 'IsVisible' is true"
           Visibility="{Binding IsVisible, 
                                Converter={StaticResource BooleanToVisibilityConverter}}"/>

上記の例では、ブールIsVisibleプロパティがSystem.Windows.Visibility列挙体の値に変換されています。 Visibility.Visibleがtrueの場合、 Visibility.Collapsed指定されている場合。

コンバータの作成と使用:BooleanToVisibilityConverterおよびInvertibleBooleanToVisibilityConverter

バインディング経験を拡張して拡張するために、あるタイプの値を別のタイプの別の値に変換するコンバーターがあります。データバインディングでコンバーターを活用するには、最初にDataConverterクラスを作成する必要があります。

  • IValueConverter (WPF&UWP)

または

  • IMultiValueConverter (WPF)

複数の型を1つの型に変換する場合
この場合、 boolean True/False値を、対応するVisibility Visibility.VisibleおよびVisibility.Collapsedに変換することに焦点を当てます。

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool) value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (value is Visibility && (Visibility) value == Visibility.Visible);
    }
}

Convertあなたはいつでもメソッドが呼び出されたGETデータFROM ViewModel
ConvertBack時に呼び出されたSETデータINGのTO ViewModelするためにBindingMode.TwoWayバインディング。

もちろん、コンバーター内のプロパティを利用することもできます。これを見てみましょう:

public class InvertibleBooleanToVisibilityConverter : IValueConverter
{
    public bool Invert { get; set; } = false;

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value is bool && (bool) value != Invert) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return (value is Visibility && ((Visibility) value == Visibility.Visible) != Invert);
    }
}

Bindingでコンバータを使用する場合は、単にページ、ウィンドウ、または他の要素のリソースとして宣言し、それにキーを与え、潜在的に必要なプロパティを提供します。

<Page ...
    xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
    <converters:InvertibleBooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        Invert="False" />
</Page.Resources>

バインディングでStaticResourceとして使用します。

<ProgressRing 
        Visibility="{Binding ShowBusyIndicator, 
            Converter={StaticResource BooleanToVisibilityConverter},
            UpdateSourceTrigger=PropertyChanged,
            Mode=OneWay}" />


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow