サーチ…
パラメーター
| パラメータ | 詳細 |
|---|---|
| 値 | 変換元の値 |
| 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}" />