選項1:FallbackValue
您可以使用FallbackValue
這一點。
local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';"
關於到Spec它不只是回落,如果沒有值(null是一個值)。所以,你必須給你轉換器更改爲:
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更關注的問題。