在 MVVMCross 中显示为 NULL 时显示一个值
本文关键字:显示 一个 MVVMCross NULL | 更新日期: 2024-11-10 04:00:00
我有以下NullableConverter
类。但是当我运行我的应用程序时,它没有在TextView
显示任何内容,如果值为 null,我怎么能显示 0?可以在axml
中做到这一点吗?
public class NullableValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
public override object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || string.IsNullOrEmpty(value.ToString()))
{
return null;
}
return value;
}
}
在我的视野中:
local:MvxBind="Text Age,Converter=Nullable;"
选项 1:回退值
您可以使用FallbackValue
。
local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';"
关于规范,如果没有值(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
传递回退
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 更关心的问题。