はオプション1:FallbackValue
あなたはこのためにFallbackValue
を使用することができます。 Specにについて
local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';"
は値が(ヌル値である)が存在しない場合、それはちょうど、フォールバックありません。
public class NullableValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (string.IsNullOrEmpty(value?.ToString()))
{
throw new ArgumentNullException(nameof(value));
}
return value;
}
// ...
}
オプション2::だから、あなたはにあなたのコンバータを変更する必要が
それとも、単に例外をスローするのではなく、0
を返すことができます変換でシンプルなリターンをしてから使用していないFallbackValue
public class NullableValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (string.IsNullOrEmpty(value?.ToString()))
{
return "0";
}
return value;
}
// ...
}
しかし、このコンバータはそれほど一般的ではありません。
オプション3:ConverterParameterは
第三の選択肢はConverterParameter
public class NullableValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (string.IsNullOrEmpty(value?.ToString()))
{
return parameter;
}
return value;
}
// ...
}
経由でフォールバックを渡すと、このように結合することである。
local:MvxBind="Text Age, Converter=Nullable, ConverterParameter='0';"
をしかし、その後、あなたは与える必要がありますより具体的な名前はNullableWithFallbackValaueConverter
などです。
サイドノート
可能であればMvxValueConverter<TFrom, TTo>
を使用してみてください。だから、Convert
とConvertBack
の中にキャストする必要はありません。この特定のコンバーターのためにそれほど意味をなさないでしょう。しかし、あなたが知らなかった場合に備えて。
サイドノート#2
私が示した値は、あなたのビューでデータバインディングに依存していることを、このアプローチの欠点があるため、このアプローチは、いくつかの男によって批判されることを想像することができます。これは複数回書き込む必要があります(iOSやAndroidなど)。実際の値がnull
の場合はフォールバック値を設定する方がViewModelの関心事です。