MvvmCross是否有标准转换器,它在空数字字段上返回null?

时间:2014-02-20 10:30:27

标签: mvvmcross

Single?属性绑定到numberDecimal EditText。 MvvmCross更新每个非空的EditText输入的属性值。但是当EditText为空时它不会更新属性,而我需要为空输入提供属性的 null 值。

我使用自定义转换器

为这个问题编写了一个愚蠢的解决方案
public class PriceValueConverter : MvxValueConverter<Single?, String>
{
    protected override float? ConvertBack(string sourceValue, Type targetType, object parameter, CultureInfo culture)
    {                      
        Single targetValue;
        if ( !string.IsNullOrWhiteSpace(sourceValue) && 
            Single.TryParse(sourceValue, out targetValue))
            return targetValue;

        return null;
    }

    protected override string Convert(float? value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.ToString();
    }
}

可以使用local设置为EditText:MvxBind =“Text Price,Converter = Price”。 但这不是一种优雅的方式。

编辑:

视图模型的属性代码如下:

    public Single? Price
    {
        get { return _price; }
        set
        {
            _price = value;
            RaisePropertyChanged(() => Price);
        }
    }

    private Single? _price;

仅当有界EditText具有某些内容(非空)时,才会调用属性的Setter以及RaisePropertyChanged。因此,当我从EditText中删除所有数字时,关联的属性等于最后的非空值,而对于空输入我需要 Price = null

如果我在调用RaisePropertyChanged时尝试设置断点,则只有当EditText为非空时才会调用它,而当它为空时不会被调用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您能否显示视图模型属性的代码?

您确定要在该属性上实际调用RaisePropertyChanged吗?

如果您在调用RaisePropertyChanged时尝试设置断点,它是否有效?