MVVMCross中的System.FormatException

时间:2016-04-20 19:51:03

标签: c# android xamarin mvvmcross

以下代码通过mvvmcross消息传递协议即时更新属性。

我现在面临的问题是,当用户清除agecategory textviews时,我会收到systemformat异常,我猜当textview变为空白时,它不会解析它到一个数字?

  

System.FormatException:输入字符串的格式不正确。

MainViewModel

private readonly IMvxMessenger _messenger;
private readonly MvxSubscriptionToken _token;

public MainViewModel(IMvxMessenger messenger) {

    _messenger = messenger;
    _token = messenger.Subscribe<SelectedItemMessage>(OnMessageReceived);;
}

private void OnMessageReceived(SelectedItemMessage obj)
{
    Age = obj.Age;
    Category= obj.Category;
}

DetailViewModel

private readonly IMvxMessenger _messenger;

public DetailViewModel(IMvxMessenger messenger) {
    _messenger = messenger;
}

public void UpdateMethod() {
    var message = new SelectedItemMessage(this,  age, category); 
    _messenger.Publish(message, typeof(SelectedItemMessage));
}

SelectedItemMessage

public SelectedItemMessage(object sender, double age, int category) : base(sender)
    {
        Age = age;
        Category = category;
    }

    public double Age { get; set; }
    public int Category{ get; set; }
}

1 个答案:

答案 0 :(得分:1)

您需要一个将空字符串转换为null的值转换器,并且您需要使Age属性为空。之后,您需要在绑定中指定convert:

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;"

您可以在Value Converters Wiki

了解有关值转换器的更多信息