Option 1: FallbackValue
können Sie FallbackValue
für diese.
local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';"
zum Spec In Bezug auf sie nur zurück fällt, wenn der kein Wert ist (null ist ein Wert). So müssen Sie Sie-Konverter ändern zu:
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;
}
// ...
}
Option 2: einfache Rückkehr in Convert
Oder Sie können einfach 0
zurückkehren, anstatt eine Ausnahme zu werfen, und dann verwenden Sie nicht 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;
}
// ...
}
Aber dieser Konverter ist dann nicht mehr so generisch.
Option 3: Converter
Die dritte Option ist die Rückfall über die 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;
}
// ...
}
Und binden wie dies passieren:
local:MvxBind="Text Age, Converter=Nullable, ConverterParameter='0';"
Aber dann sollten Sie das geben Konverter einen aussagekräftigeren Namen wie NullableWithFallbackValaueConverter
oder was auch immer.
Exkurs
Try MvxValueConverter<TFrom, TTo>
wenn möglich zu verwenden. Sie müssen also nicht Convert
und ConvertBack
einwerfen. Für diesen speziellen Konverter würde es nicht viel Sinn machen. Aber nur für den Fall, dass Sie es nicht wussten.
Exkurs # 2
Ich kann mir vorstellen, dass dieser Ansatz wird von einigen Jungs kritisiert werden, da der Nachteil dieses Ansatzes ist, dass der angezeigte Wert auf den Daten hängt in Ihrer Ansicht verbindlich. Und das müssen Sie mehrmals schreiben (z. B. in iOS und Android). Einen Fallback-Wert zu setzen, wenn der tatsächliche Wert null
ist, ist ein Anliegen des ViewModels.