cas*_*las 0 c# data-binding xamarin.android mvvmcross xamarin
我有以下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;
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来:
local:MvxBind="Text Age,Converter=Nullable;"
Run Code Online (Sandbox Code Playgroud)
选项1:FallbackValue
你可以用FallbackValue它.
local:MvxBind="Text Age, Converter=Nullable, FallbackValue='0';"
Run Code Online (Sandbox Code Playgroud)
关于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;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
选项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;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是这个转换器不再那么通用了.
选项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;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
像这样绑定:
local:MvxBind="Text Age, Converter=Nullable, ConverterParameter='0';"
Run Code Online (Sandbox Code Playgroud)
但是,你应该给转换器一个更有意义的名称,如NullableWithFallbackValaueConverter或任何.
边注
MvxValueConverter<TFrom, TTo>尽可能使用.所以,你不必投内Convert和ConvertBack.对于这个特殊的转换器,它没有多大意义.但万一你不知道.
旁注#2
我可以想象这种方法会受到一些人的批评,因为这种方法的缺点是,显示的值取决于视图中的数据绑定.这你必须多次写(例如在iOS和Android中).如果实际值是设置回退值null更多是ViewModel的关注点.
| 归档时间: |
|
| 查看次数: |
745 次 |
| 最近记录: |